master 跑在虚拟机上,slave 在虚拟机里用的 docker 跑的
master
- 配置
my.cnf
:
log-bin=mysql-bin-master #启用二进制日志
server-id = 1 #本机数据库ID 标示
binlog-do-db=HA #可以被从服务器复制的库。二进制需要同步的数据库名
binlog-ignore-db=mysql #不可以被从服务器复制的库
创建给从库使用的账号
create user 'slave'@'172.17.0.2' identified by '123456'; grant replication slave on *.* to 'slave'@'172.17.0.2';
如果 ip 地址换了,可用如下命令修改:
RENAME USER user@ipaddress1 TO user@ipaddress2;
取消 ip 连接限制:注释掉
my.cnf
中的bind-address
#bind-address
因为在创建给 slave 使用的账号的时候已经指定了 ip,所以注释掉不会产生很严重的安全问题,可能需要在防火墙上做处理。
查看 bin log
mysql> show binlog events; *************************** 1. row *************************** Log_name: mysql-bin.000001 Pos: 4 Event_type: Format_desc Server_id: 1 End_log_pos: 107 Info: Server ver: 5.5.35-1ubuntu1-log, Binlog ver: 4 *************************** 2. row *************************** Log_name: mysql-bin.000001 Pos: 107 Event_type: Stop Server_id: 1 End_log_pos: 126 Info: 2 rows in set (0.00 sec)
注意开始文件是在
mysql-bin.000001
,开始位置4
slave
docker
sudo docker run -d -v /home/ksun/mysqlMS/slave:/etc/mysql -v /home/ksun/mysqlMS/log_slave:/var/log/mysql --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 mysql:5.5
配置
my.cnf
这里使用自定义的 mysql 配置文件,所以把 host(ubuntu 14) 的my.cnf
复制到了 docker 里,重启容器后报错退出了,需要修改下配置文件注释掉如下两行:
#basedir = /usr //Path to installation directory. All paths are usually resolved relative to this.
#lc-messages-dir = /usr/share/mysql //The directory where error messages are located.
修改 server-id :
server-id = 2 #从服务器ID号,不要和主ID相同 ,如果设置多个从服务器,每个从服务器必须有一个唯一的server-id值,必须与主服务器的以及其它从服务器的不相同。可以认为server-id值类似于IP地址:这些ID值能唯一识别复制服务器群集中的每个服务器实例。
- 开启 主从复制
mysql> change master to master_host='172.17.0.1',master_user='slave',master_password='123456', master_log_file='mysql-bin.000001' ,master_log_pos= 4
mysql> start slave;
//查看 slave 状态
mysql> show slave status\G