docker数据库主从复制学习总结:
1.创建主mysql容器
当然拉取mysql镜像就忽略了,到hub.docker.com上pull镜像下来就是啦。
docker run --name mysql-master -d --mount src=mysql-vol,dst=/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=wordpress mysql:5.7 --character-set-server=utf8
2.开启容器
docker start mysql-master
3.创建从mysql容器
docker run --name mysql-slave -d --mount src=mysql-vol,dst=/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=wordpress mysql:5.7 --character-set-server=utf8
4.开启容器
docker start mysql-slave
5.开启主容器bin-log日志
如果没有vim要先按照vim
apt-get update
apt-get install vim
vim编辑my.cnf
vi etc/mysql/mysql.conf.d/mysqld.cnf
添加以下内容
server-id=1#自定义
log-bin=mysql-bin
如果现实为以上内容则说明bin-log日志已开启
6.为从库设置复制账号
/*
创建账号sql:
create user 'username'@'localhost' identified by 'password';
授权
grant [权限] on *.* to 'username'@'localhost' identified by 'password';
*/
mysql> create user 'repl_131'@'%' identified by 'repl_131';
Query OK, 0 rows affected (0.04 sec)
mysql> select user,host from mysql.user;
mysql> grant replication slave on *.* to 'repl_131'@'%' identified by 'repl_131';
Query OK, 0 rows affected, 1 warning (0.00 sec)
7.查询主容器ip并在从容器中登录
docker inspect mysql-master
mysql -h172.10.0.2 -urepl_131 -p
8.从容器配置中继日志
vi etc/mysql/mysql.conf.d/mysqld.cnf
server-id=2
relay_log=mysql-relay-bin
relay_log-index=mysql-relay-bin.index
9.重启从容器
docker restart mysql-slave
10.启动复制
change master to master_host="172.10.0.2",master_port=3306,master_user="repl_131",
master_password="repl_131",master_log_file="mysql-bin.0.000001",master_log_pos=0;
show slave status \G;
出现这种错误的原因是应为日志文件不对在主容器中查看binlog的日志文件
show master status
修改从容器复制语句为
change master to master_host="172.10.0.2",master_port=3306,master_user="repl_131",
-> master_password="repl_131",master_log_file="mysql-bin.000002",master_log_pos=0;
在执行上面操作
说明复制成功!!
注意:住容器中和从容器中的server-id不能相同,否则会报错误!!!
测试
在主库中创建数据库
查看从库复制情况
测试成功!!!