1.部署环境:
docker虚拟机,win10安装docker虚拟机,具体配置就不介绍了,参考其他文章。
Linux虚拟机与本机设置共享目录,以便挂载文件到docker容器,具体配置参考我其他文章。
2.下载mysql镜像
1.我直接输入的docker pull mysql,下载的mysql最新的镜像,貌似是8以上,具体没看。
2.在本地共享目录新建两个mysql配置文件,分别是master mysql 配置文件和slave mysql配置文件
mysql-m.cnf:
[mysqld]
log-bin = mysql-bin
server-id=1
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
mysql-s.cnf:
[mysqld]
log-bin=mysql-bin
server-id=2
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
3.启动镜像,命令:
docker run -d -e MYSQL_ROOT_PASSWORD=root123 --name mysql-m -v /mnt/mysql/my-m.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -p 3307:3306 mysql
docker run -d -e MYSQL_ROOT_PASSWORD=root123 --name mysql-s -v /mnt/mysql/my-s.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -p 3308:3306 mysql
4.进入主mysql容器,即执行命令:docker exec -it mysql-m /bin/bash
5.创建用户test.执行命令:create user 'test'@'192.168.99.100' identified by '123456';并授权,执行如下命令:
GRANT REPLICATION SLAVE ON *.* to 'test'@'%';
遇到的问题:执行授权会报错:没有权限授权。 是因为mysql8改变了授权机制,在主数据库把test的host改成%,在执行授权命令就可以了。授权的时候,为了方便后面测试,最后给test测试用户插入的权限,后面可以直接用Navicat客户端在线建表测试主从复制。
6.查看主数据库的状态:
7.记住上面两个参数,File和position在从数据库会设置用到这两个参数。
8.进入从数据库。
9.执行命令:
执行命令:change master to master_host='192.168.99.100',master_user='test',master_password='123456',master_log_file='bin_log.000002',master_log_pos=7052,master_port=3307;
10.启动命令:start slave;
11.查看状态:show slave status \G;
上面slave_IO_Running:YES SLAVE_SQL_RUNNING:YES 表示运行成功。
12.登录主数据库和从数据库:
在主数据库建一个test数据库
看一下,在从数据库有没有同步,刷新一下:
可以看到自动同步了相同的数据库。插入一条数据看看效果:
大功告成,收工