在docker hub 搜索 amd64/mysql,找到自己需要的版本以5.7为例,https://registry.hub.docker.com/r/amd64/mysql/tags先下载运行mysql-master(注意修改你的相应路径和密码)
docker run -p 3307:3306 --name mysql-master -v /Users/jelex/dockerV/mysql-master/log:/var/log/mysql -v /Users/jelex/dockerV/mysql-master/data:/var/lib/mysql -v /Users/jelex/dockerV/mysql-master/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d amd64/mysql:5.7
查看是否启动成功
docker ps
配置mysql-master的cnf文件
jelex@localhost conf % pwd /Users/jelex/dockerV/mysql-master/conf jelex@localhost conf % cat my.cnf [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci server_id=1 #不需要同步的db binlog-ignore-db=mysql log-bin=mall-mysql.bin binlog_cache_size=1M binlog_format=mixed expire_logs_days=7 #跳过主健重复 slave_skip_errors=1062
重启mysql-master并查看是否成功
docker restart mysql-master docker ps
登录mysql-master容器内
#我们尽量避免使用slave这种词汇 mysql> create user 'replica'@'%' IDENTIFIED BY 'root'; Query OK, 0 rows affected (0.08 sec) mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'replica'@'%'; Query OK, 0 rows affected (0.03 sec) mysql> show master status; +-------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-------------------+----------+--------------+------------------+-------------------+ | mall-mysql.000004 | 617 | | mysql | | +-------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.01 sec) mysql>
另起一个终端,开始运行mysql-replica从库
docker run -p 3308:3306 --name mysql-replica -v /Users/jelex/dockerV/mysql-replica/log:/var/log/mysql -v /Users/jelex/dockerV/mysql-replica/data:/var/lib/mysql -v /Users/jelex/dockerV/mysql-replica/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d amd64/mysql:5.7 #查看是否运行成功 docker ps mysql-replica
配置从库的cnf
jelex@localhost conf % pwd /Users/jelex/dockerV/mysql-replica/conf jelex@localhost conf % cat my.cnf [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci server_id=102 #不需要同步的db binlog-ignore-db=mysql log-bin=mall-mysql-replica1.bin binlog_cache_size=1M binlog_format=mixed expire_logs_days=7 #跳过主健重复 slave_skip_errors=1062 relay_log=mall-mysql-relay-bin #将复制事件写进自己的二进制日志 log_slave_updates=1 #replica 设置为只读(具有super权限的用户除外) read_only=1
修改从库配置后重启
docker restart mysql-replica # 查看是否重启成功 docker ps
进入从库容器
jelex@localhost conf % docker exec -it mysql-replica /bin/bash root@6915ccd9c25d:/# root@6915ccd9c25d:/# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 2 Server version: 5.7.36-log MySQL Community Server (GPL) Copyright (c) 2000, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
起第三个终端,查看本机IP(127.0.0.1不行)
>ifconfig ... en0: flags=8863mtu 1500 options=6463 ether f8:4d:89:96:86:92 inet6 fe80::8b5:ca7c:23d:cd98%en0 prefixlen 64 secured scopeid 0xe inet 192.168.0.101 netmask 0xffffff00 broadcast 192.168.0.255 nd6 options=201 media: autoselect status: active ... 找到你自己的IP,我这是 192.168.0.101
回到从库容器mysql内(第2个终端)
mysql> change master to master_host='192.168.0.101', master_user='replica',master_password='root',master_port=3307,master_log_file='mall-mysql.000004',master_log_pos=617,master_connect_retry=30;
Query OK, 0 rows affected, 2 warnings (0.14 sec)
mysql>
mysql> show slave status G;
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 127.0.0.1
Master_User: replica
Master_Port: 3307
Connect_Retry: 30
Master_Log_File: mall-mysql.000004
Read_Master_Log_Pos: 617
Relay_Log_File: mall-mysql-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: mall-mysql.000004
Slave_IO_Running: No
Slave_SQL_Running: No
...省略...
...省略...
Master_TLS_Version:
1 row in set (0.00 sec)
现在看到 Slave_IO_Running: No
Slave_SQL_Running: No
启动主从
mysql> start slave; Query OK, 0 rows affected (0.03 sec)
再看从库同步状态
mysql> show slave status G;
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 127.0.0.1
Master_User: replica
Master_Port: 3307
Connect_Retry: 30
Master_Log_File: mall-mysql.000004
Read_Master_Log_Pos: 617
Relay_Log_File: mall-mysql-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: mall-mysql.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...省略...
...省略...
Master_TLS_Version:
1 row in set (0.00 sec)
最后:在主库mysql-master中建库建表,插入数据,再去从库中查看,验证主从同步…



