在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
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
docker restart mysql-master
docker ps
#我们尽量避免使用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
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=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=6463<RXCSUM,TXCSUM,TSO4,TSO6,CHANNEL_IO,PARTIAL_CSUM,ZEROINVERT_CSUM>
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<PERFORMNUD,DAD>
media: autoselect
status: active
...
找到你自己的IP,我这是 192.168.0.101
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中建库建表,插入数据,再去从库中查看,验证主从同步…