- docker pull mysql:5.7
-
相关命令:
先启动mysql01容器:(即之后的主机)
- 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容器:(即之后的从机)
- 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
-
命令解释:
相关命令:
- docker ps -a #查看全部容器(运行中加未运行的)
-
都已正常启动。
搭建过程中,为了减少错误的产生,就多了这一步的测试。
我们可以直接拿Navicat来进行连接测试。
注意事项: 记得打开安全组,虚拟机的话记得处理好防火墙。(另外我这里是3310,可根据自己需要更改端口)
测试启动成功后,我们再来进行下一步。
之前我们启动的时候写了这句-v /home/mysql/node-1/config:/etc/mysql/,将mysql 的配置文件夹和宿主机的文件夹挂载起来的。
那么我们就可以直接在宿主机下的/home/mysql/node-1/config/编写配置文件了。
我们先编写主机上的配置文件:
- vim my.cnf
-
回车之后是这样的:
先按insert键,然后直接将下面主机的配置文件复制上去即可:
- [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键–>再按Shift+:键–>输入wq–保存退出。
从机上的my.cnf也是同样的方式
- [mysqld]
- #从服务器唯一ID
- server-id=2
- #启用中继日志
- relay-log=mysql-relay
-
重新启动mysql容器
- docker restart mysql01 mysql02
-
- docker ps -a #查看容器
-
接下来就是搭建主从复制了。
- docker exec -it mysql01 /bin/bash #进入容器
- mysql -uroot -p123456 #连接mysql
-
给从机授权,为了让从机能够和主机连接起来。
- GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';
-
- 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后,从机也随之就有了。(这里的命名是确定的,因为在配置文件中说明了复制testdb数据库)。
当然这些还是有看不出到底有没有复制的话,咱们直接测试函数,就能知道啦。
- insert into my_table01(id,name) VALUE(1,@@hostname);
-
这就可以看出主从复制确实是成功的,但是在使用函数上有数据不一致的问题。
如何停止从服务复制功能
- stop slave;
-
如何重新配置主从 (即清除之前的主从配置)
- stop slave;
- reset master;
-