【docker安装Mysql并配置主从复制】

Mysql主从复制

目的:

是为了后面naocs集群的服务配置做准备工作

准备工作

准备至少两台虚拟机或服务器,安装好了docker,找到他们的ip地址

后面操作都用xshell操作来代替

拉取并启动mysql镜像和容器
主机的命令为mysql01,对外端口用3310来连接
docker run -d -p 3310:3306 -v /home/mysql/node-1/config:/etc/mysql/ -v/home/mysql/node-1/data:/var/lib/mysql  -e MYSQL_ROOT_PASSWORD=123456  --name mysql01 mysql:5.7
从机的命名为mysql02,对外端口用3311来连接
docker run -d -p 3311:3306 -v /home/mysql/node-2/config:/etc/mysql/ -v/home/mysql/node-2/data:/var/lib/mysql  -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 mysql:5.7
命令解释:

-d: 后台运行容器,并返回容器ID

-p 3311:3306 :将容器的3306端口映射到宿主机3310端口

-e MYSQL_ROOT_PASSWORD=123456 :配置数据库连接密码

-v /home/mysql/node-2/config:/etc/mysql/ :将配置文件夹挂载到宿主机

--name mysql01(02):将容器命名为 mysql01(02)

docker ps -a #查看全部容器(运行中加未运行的)分别查看mysql容器的状态
  都处于正常运行状态
下面用navicat连接两个数据库

都正常连接

开始主从复制的配置

之前我们启动的时候写了这句-v /home/mysql/node-1/config:/etc/mysql/,将mysql 的配置文件夹和主机的文件夹挂载起来的。

那么我们就可以直接在主机下的/home/mysql/node-1/config/编写配置文件了,

那么从机下的就是/home/mysql/node-2/config/编写配置文件了。

进入主机操作:

cd /home/mysql/node-1/config/

vim my.cnf

复制下面内容进去

[mysqld]

#修改配置文件:vim /etc/my.cnf

#主服务器唯一ID

server_id=1

#启用二进制日志

log-bin=mysql-bin

设置不要复制的数据库(可设置多个)

binlog-ignore-db=mysql

binlog-ignore-db=information_schema

#设置需要复制的数据库 需要复制的主数据库名字,多个数据库的话,需要多行书写即可,不可逗号连接

binlog-do-db=testdb

#设置logbin格式

binlog_format=STATEMENT

然后esc-> :wq 保存

进入从机操作

cd /home/mysql/node-2/config/

vim my.cnf

复制下面的内容

[mysqld]

#从服务器唯一ID

server_id=2

#启用中继日志

relay-log=mysql-relay

然后esc-> :wq 保存

分别在主从机上,用命令docker restart mysql01 和 docker restart mysql02 重启mysql的容器

搭建主从复制

进入主机的mysql

docker exec -it mysql01 /bin/bash #进入容器

mysql -uroot -p123456 #连接mysql

主机上建立帐户并授权 slave

给从机授权,为了让从机能够和主机连接起来。

GRANT REPLICATION SLAVE ON . TO 'slave'@'%' IDENTIFIED BY '123456';

复制

查询master状态

show master status; #查询master的状态

把这里的File和Position记下来哈,等下在从机上要用到。

File: mysql-bin.000003

Position: 438

复制

Binlog_Do_DB:需要复制的数据库。

Binlog_Ignore_DB:不需要复制的数据库。

注意:此步骤后不要再操作主服务器MySQL,防止主服务器状态值变化

由此进入从机操作:

进入mysql02容器

docker exec -it mysql02 /bin/bash

mysql -uroot -p123456

输入命令

CHANGE MASTER TO MASTER_HOST='主机的ip地址',MASTER_USER='slave',MASTER_PASSWORD='123456',MASTER_PORT=3310, MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=438;

解释:

CHANGE MASTER TO MASTER_HOST='主机的IP地址',

MASTER_USER='slave'(刚刚配置的用户名),

MASTER_PASSWORD='123456'(刚刚授权的密码),

master_port=主机开放的端口 我这里是3310端口,

MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS=具体值(之前的Position);

注意事项:如果在这里出现错误,先重置。执行完下面两条命令。

stop slave;

reset master;

复制

启动从服务器复制功能

start slave;

查看从服务器状态

show slave status\G

#下面两个参数都是Yes,则说明主从配置成功!

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

测试,主机的testdb库都会及时同步过去

现在主库的表里没数据,添加一条

查看从库的数据,也存在了

到此一主一从的mysql主从复制就完成了。

mysql主从复制的优点:

1、数据更安全:做了数据冗余,不会因为单台服务器的宕机而丢失数据

2、性能大大提升:一主多从,不同用户从不同数据库读取,性能提升

3、扩展性更优:流量增大时,可以方便的增加从服务器,不影响系统使用

4、负载均衡:一主多从相当于分担了主机任务,做了负载均衡。

相关推荐
Lill_bin14 分钟前
报表生成---JFreeChart
docker·信息可视化·zookeeper·云原生·容器·jenkins
warrah3 小时前
mysql主从同步
mysql·主从
JSON_L4 小时前
MySQL 事务处理
数据库·mysql
别挡6 小时前
CentOS Stream 8中安装和使用 Docker
linux·docker·centos
飞翔沫沫情6 小时前
mysql快速定位cpu 占比过高的sql语句
mysql
King.6247 小时前
SQLynx如何提高企业数据库安全?
数据库·sql·mysql·postgresql·oracle
愤怒的代码7 小时前
Centos使用阿里云镜像安装docker
linux·docker·centos
汪公子4927 小时前
使用docker部署考试系统
docker
夜夜亮晶晶8 小时前
MySQL——表操作
数据库·mysql
好奇的菜鸟9 小时前
如何使用Docker快速启动Nginx服务器
服务器·nginx·docker