主要介绍下 docker 下实现 mysql 主从同步的 demo
安装和启动 docker
本文不详细介绍这个的具体步骤了
// 拉取镜像
docker pull mysql
创建主从 mysql 服务器
// 创建 主mysql 容器
docker run -t --name mysql-master -p 3307:3306 -e MYSQL_ROOT_PASSWORD='123456' -d mysql
// 创建 从mysql 容器
docker run -t --name mysql-slave -p 3308:3306 -e MYSQL_ROOT_PASSWORD='123456' -d mysql
添加配置文件
// 本地创建cnf
// master.cnf
[mysqld]
log-bin=mysql-bin
server_id=1
// slave.cnf
[mysqld]
server_id=2
// server_id 必须唯一
将配置文件传到容器里
docker cp master.cnf mysql-master:/etc/mysql/my.cnf
docker cp slave.cnf mysql-slave:/etc/mysql/my.cnf
# 重启两个容器,否则配置不会生效
docker restart [容器id]
配置主从 mysql
主 mysql
docker ps
docker exec -it mysql-master mysql -uroot -p123456
# 创建一个用户
CREATE USER 'repl'@'%' IDENTIFIED BY '123456'; -- '%'意味着所有的终端都可以用这个用户登录
GRANT SELECT,REPLICATION SLAVE ON *.* TO 'repl'@'%'; -- SELECT权限是为了让repl可以读取到数据,生产环境建议创建另一个用户
# 此时可以看下,master 的状态了,正常情况下应该如下:
show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
从 mysql
首先得看下主 mysql 的 ip
docker inspect [主mysql容器id]
配置从 mysql
mysql> CHANGE MASTER TO MASTER_HOST='[主mysql的ip]',MASTER_PORT=3306, MASTER_USER='repl', MASTER_PASSWORD='123456';
# ERROR 1794 (HY000): Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log.
# 出现上面的错误一般是server_id没配置对
# ERROR 3021 (HY000): This operation cannot be performed with a running slave io thread; run STOP SLAVE IO_THREAD FOR CHANNEL '' first.
# 这个是需要先 stop slave; 才能更新
# 除上面的情况,应该可以正常启动;
start slave;
show slave status;
------------------------------
Slave_IO_State: Waiting for master to send event
Master_Host: 172.17.0.2
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 154
Relay_Log_File: 4b58ca523145-relay-bin.000002
Relay_Log_Pos: 367
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
------------------------------
# 这样表示成功了。等待同步中
# 注意有可能端口会配置错误,貌似不是 3307???
# 主库执行
create database binlog;
# 就可以同步了~
over~
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于