在Mac系统上使用Docker实现MySQL 5.7.28主从数据库同步

在Mac系统上使用Docker实现MySQL 5.7.28主从数据库同步
MySQL的主从数据库同步(主从复制)是指一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据发生新增或者变更后会被自动同步到从服务器之中,从而可以提高数据库的高可用性。本文将介绍如何在Mac上使用Docker实现Mysql的主从数据库同步。

环境

  1. Mac环境:macOS Catalina 10.15
  2. 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;

master状态信息

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从数据库状态

提示:当Slave_IO_RunningSlave_SQL_Running都为YES的时候,说明主从同步配置成功。

7、使用数据库工具进行主从验证

接下来我们就可以用数据库图形化软件,如:Navicat连接两个数据库,在主数据库创建新的数据库、表和数据。如果在从数据库中同时出现了对应的数据库、表和数据则说明主从配置成功。
主从数据库同步成功

the end