mysql 双主配置 基于docker 测试 及数据恢复测试

基于docker 1.10.3
镜像地址:https://hub.docker.com/_/mysql/
docker 相关的我就不介绍了,如果不是docker 也没有关系,自己装两个mysql  命令基本是一样的。都能看懂的。用docker 主要是测试方便

启动两个myql的容器
为了方便我们自己建容器网络(docker 1.9后)
docker network create -d bridge --subnet=152.168.0.0/16 my_net
mysql1
 docker run --name mysql1 --net=my_net --ip=152.168.0.2 -v /etc/mysql1:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d 0bd9ef0792fa

mysql2 
docker run --name mysql2 --net=my_net --ip=152.168.0.3 -v /etc/mysql2:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d 0bd9ef0792fa

在mysql1 volume 中放入 config-file.cnf  扩展容器中的my.cnf
[mysqld]
log-bin   = mysql-bin  #名字
server-id = 1  # 各节点不同即可
expire-logs-days  = 100   #过多少天清除日志
binlog-ignore-db  = mysql  #忽略库
log-slave-updates # 这个参数用来配置从服务器的更新是否写入二进制日志,从库作为别人的主 需要
auto-increment-increment = 2  # 自增长度
auto-increment-offset = 1    # 从多少开始,防止自增主键同步重复

在mysql2 volume   中放入 config-file.cnf  扩展容器中的my.cnf
[mysqld]
log-bin   = mysql-bin
server-id = 2 
expire-logs-days  = 100 
binlog-ignore-db  = mysql
log-slave-updates
auto-increment-increment = 2 
auto-increment-offset = 2


开始设置主从复制
在mysql1执行
GRANT REPLICATION SLAVE ON *.* to 'mysync'@'%' identified by '123456';
然后 执行show master staus; # 查看binlog信息

然后去mysql2 执行
change master to master_host='152.168.0.2',master_user='mysync',master_password='123456',  master_log_file='mysql-bin.000002',master_log_pos=228;

start slave;
show slave status\G  
mysql 双主配置 基于docker 测试 及数据恢复测试_第1张图片
两个yes代表成功。不成功下面有错误信息和原因

然后在mysql2上执行
GRANT REPLICATION SLAVE ON *.* to 'mysync'@'%' identified by '123456';
然后 执行show master staus; # 查看binlog信息
mysql 双主配置 基于docker 测试 及数据恢复测试_第2张图片
然后去mysql1 执行
change master to master_host='152.168.0.3',master_user='mysync',master_password='123456',  master_log_file='mysql-bin.000003',master_log_pos=228;

start slave;
show slave status\G  
同样检查是否成功。
正常的mysql重启,slave现成也会自动重启,自动完成未完成的复制。
注意点:  如果双主 用keepalived做高可用 mysql1 挂了,切换到mysql2 ,然后mysql1 恢复,如果配置了keepalived 的切换,如果数据量大 则 会存在问题,小数据量不会有问题。

手动测试恢复:
docker stop mysql2

docker exec -it mysql1 mysqldump -uroot -p123456 -B my_test my_test2 my_test3 -l -F > /mnt/0815.sql

mysql执行备份语句 -l  加锁-F 重置 binglog,-B是有建库语句 ,然后mysql2 
stop  slave,手动恢复数据:
docker exec -it mysql2 mysql -uroot -p123456 < /mnt/0815.sql
然后从新binlog开始同步 ,注意修改mysql1 上show master status; 的结果
change master to master_host='152.168.0.2',master_user='mysync',master_password='123456',  master_log_file='mysql-bin.000002',master_log_pos=228;
start slave;
show slave status\G  




你可能感兴趣的:(mysql,docker)