使用docker创建MySQL主从复制

1. 准备工作,把虚拟机的内存调到2G以上:
2.在这里插入图片描述
在这里插入图片描述
3. 查看是否已经安装了docker:rpm -qa | grep docker
4. 卸载原来的docker:yum remove 组件
5. 安装docker:yum install -y docker
6. 启动docker:systemctl start docker
报错:
在这里插入图片描述
解决:vim /etc/sysconfig/docker
在这里插入图片描述
报错:
/usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused “process_linux.go:258: applying cgroup configuration for process caused “Cannot set property TasksAccounting, or unknown property.””.
解决:
yum update
启动成功。
6. 修改仓库为阿里云仓库,然后重启systemctl restart docker:vim /etc/docker/daemon.json
{
“registry-mirrors”: [“https://uulfe4bd.mirror.aliyuncs.com”]
}
7. 下载centos7镜像:docker pull registry.cn-hangzhou.aliyuncs.com/moensun/centos7
8. 查看所有的镜像:docker images
9. 创建一个centos7容器:docker run -d -p 5000:3306 --name master 3db94df3e006 /usr/sbin/init
解释:-p是指定宿主机跟docker容器之间的端口映射,以便外网访问docker容器,如5000:3306,那么通过访问宿主机ip:5000,相当于访问docker容器的3306端口
,可以使用多个-p来指定多个端口。

11. 查看所有的docker容器:docker ps -a
12. 修改容器名称:docker rename kind_newton master(如果在创建时已经通过–name指定了名称,则此处不需要修改)
13. 进入centos7容器:docker exec -it master /bin/bash
14. 安装vim和上传命令:yum install -y vim
yum install –y lrzsz

15. 上传MySQL压缩包并安装,安装过程参考https://blog.csdn.net/shidebin/article/details/83548436,我这篇文章。要注意的是前面创建容器时映射的端口为3306,而且只映射了一个端口,所以在my.cnf文件中mysql的端口也应写成3306,不然用navicate是连不上的。(要非常注意,我这里弄了很久)
安装报错:
[root@4099d4f64191 mysql]# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
解决:
yum install -y perl perl-Module-Build net-tools autoconf libaio numactl-libs
启动成功,记住这个密码,登录时用。
在这里插入图片描述
15 使用navicate连接刚才的mysql,ip为宿主机的ip而不是容器的ip,端口是宿主机映射端口不是my.cnf配置的3306端口:
在这里插入图片描述
16 把刚才建的容器保存为镜像,用来创建其他mysql容器:
docker stop master
docker export master > mysqlMaster.tar
cat mysqlMaster | docker import - mysqlimage:master
17 使用刚才保存的mysql镜像再创建一个mysql容器:
docker run -d -p 5001:5001 31da432e6548 /usr/sbin/init
docker ps –a
docker rename upbeat_shirley master2
docker exec -it master2 /bin/bash
18 修改mysql配置并启动:
修改my.cnf:port=5001,此处应改为映射的端口。
删除/usr/local/mysql/data下的所有文件,并执行命令:
rm –rf /usr/local/mysql/data/*
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
systemctl start mysql
mysql -uroot -p
SET PASSWORD = PASSWORD(‘root’);
flush privileges;
grant all on . to ‘root’@’%’ identified by ‘root’;
flush privileges;

19 主机操作:
vim /etc/my.cnf
server-id= 2
log-bin = mysql-bin
log-bin-index = mysql-bin.index
relay-log = mysql-relay
relay-log-index = mysql-relay.index
expire-logs-days = 10
max-binlog-size = 100M
max_binlog_cache_size = 8M
log-slave-updates = 1
binlog_cache_size = 4M
binlog_format = MIXED
#binlog_format = ROW
#replicate-do-db = db%.%
replicate-ignore-db= mysql.%
replicate-ignore-db=information_schema.%
replicate-ignore-db=performance_schema.%
replicate-ignore-db=sys.%
replicate-wild-ignore-table = mysql.%
sync_binlog = 1
relay_log_recovery = 1
log_slave_updates = 1
sql_mode=STRICT_TRANS_TABLES
[mysqldump]
quick
max_allowed_packet = 32M
登录mysql创建用来复制的用户:
mysql> create user ‘repl’@‘172.17.0.%’ identified by ‘shidebin12’;
Query OK, 0 rows affected (0.00 sec)

mysql> grant replication slave on . to ‘repl’@‘172.17.0.%’ identified by ‘shidebin12’;
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
重启mysql:systemctl restart mysql
登录mysql查看主机状态:
在这里插入图片描述
20 从机操作:
vim /etc/my.cnf
server-id= 3
log-bin = mysql-bin
log-bin-index = mysql-bin.index
relay-log = mysql-relay
relay-log-index = mysql-relay.index
expire-logs-days = 10
max-binlog-size = 100M
max_binlog_cache_size = 8M
log-slave-updates = 1
binlog_cache_size = 4M
binlog_format = MIXED
#binlog_format = ROW
#replicate-do-db = db%.%
replicate-ignore-db= mysql.%
replicate-ignore-db=information_schema.%
replicate-ignore-db=performance_schema.%
replicate-ignore-db=sys.%
sync_binlog = 1
relay_log_recovery = 1
log_slave_updates = 1
sql_mode=STRICT_TRANS_TABLES
[mysqldump]
quick
max_allowed_packet = 32M

注意修改server-id和port,每台机器的server-id需要不同
登录mysql关联主机:
mysql> stop slave;
Query OK, 0 rows affected (0.01 sec)

mysql> change master to
-> master_host=‘172.17.0.2’,
-> master_user=‘slaveRepl’,
-> master_password=‘shidebin12’,
-> master_log_file=‘mysql-bin.000002’,
-> master_log_pos=606;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
(注释:master_host:主机地址
master_user:主机上用来主从复制的用户,也就是刚才在主机创建的用户
master_password:用户密码
master_log_file:主机binlog文件,就是show master status中的记录
master_log_pos:复制起始位置,就是show master status中的记录)
在这里插入图片描述
说明成功:
21.验证:
在主机上新建一个库:
在这里插入图片描述
在从机上查看:
在这里插入图片描述
成功

猜你喜欢

转载自blog.csdn.net/shidebin/article/details/93855486