环境
- Mac环境:macOS Catalina 10.15
- Docker环境: Docker Desktop 4.8.1
步骤
1.使用docker命令拉取mysql5.7镜像
docker pull mysql:5.7.28
2.创建主从数据库容器
主数据库容器
docker run -d -p 3308:3306 -v ~/dev/dev-data/docker/mysql_master/conf:/etc/mysql/conf.d -v ~/dev/dev-data/docker/mysql_master/data:/var/lib/mysql -v ~/dev/dev-data/docker/mysql_master/logs:/var/log/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql_master mysql:5.7.28
从数据库容器
docker run -d -p 3309:3306 -v ~/dev/dev-data/docker/mysql_slave/conf:/etc/mysql/conf.d -v ~/dev/dev-data/docker/mysql_slave/data:/var/lib/mysql -v ~/dev/dev-data/docker/mysql_slave/logs:/var/log/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql_slave mysql:5.7.28
查看是否创建成功
~ » docker ps hfy@tzq
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8f786376bbca mysql:5.7.28 "docker-entrypoint.s…" 30 minutes ago Up 29 minutes 33060/tcp, 0.0.0.0:3309->3306/tcp mysql_slave
fa4137ab4b10 mysql:5.7.28 "docker-entrypoint.s…" 30 minutes ago Up 29 minutes 33060/tcp, 0.0.0.0:3308->3306/tcp mysql_master
3.配置主从数据库my.cnf文件
主数据库配置文件:~/dev/dev-data/docker/mysql_master/conf/my.cnf
,内容如下:
[mysqld]
server-id=1
log-bin=mysql-bin
从数据库配置文件:~/dev/dev-data/docker/mysql_slave/conf/my.cnf
,内容如下:
[mysqld]
server-id=2
log-bin=mysql-slave-bin
relay_log=mysql-relay-bin
4.重启容器,加载主从数据库配置
docker restart mysql_master mysql_slave
5.进入主数据库容器mysql_master创建同步账户
//进入mysql_master容器
docker exec -it mysql_master mysql -uroot -p123456
//创建一个用户来同步数据,每个slave使用标准的MySQL用户名和密码连接master。进行复制操作的用户会授予REPLICATION SLAVE 权限。mysql8之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';(这样有可能在slave创建与master连接时报错)
或
CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
//对用户进行授权
GRANT REPLICATION SLAVE ON *.* to 'slave'@'%';
//查看状态,记住File和Position的值,将会在从数据库mysql_slave中使用
show master status;
6、进入从数据库容器mysql_slave修改主数据库的链接信息
//进入mysql_slave容器
docker exec -it mysql_slave mysql -uroot -p123456
//设置主库链接,master_host这里使用的是机器的IP地址,master_user和master_password为在主数据库中添加的用户名和秘密,master_log_file和master_log_pos即为在主数据库容器mysql_master中,通过show master status查出来的值。千万注意:这里的master_port是主数据库mysql_master容器对外映射的端口
change master to master_host='192.168.31.193',master_user='slave',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=597,master_port=3308;
//启动slave同步
start slave;
//查看状态
show slave status\G;
提示:当
Slave_IO_Running
和Slave_SQL_Running
都为YES
的时候,说明主从同步配置成功。
7、使用数据库工具进行主从验证
接下来我们就可以用数据库图形化软件,如:Navicat连接两个数据库,在主数据库创建新的数据库、表和数据。如果在从数据库中同时出现了对应的数据库、表和数据则说明主从配置成功。