1.创建挂载路径及配置文件my.cnf,挂载mysql的数据、配置、日志
/usr/mydata/mysql/conf/s1
/usr/mydata/mysql/conf/m1
my.cnf先只写server-id,保证主从不同
2.拉取MySQL镜像,启动两个实例
docker run -p 3316:3306 --name mysql-m1 -v /usr/mydata/mysql/conf/m1:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
docker run -p 3317:3306 --name mysql-s1 -v /usr/mydata/mysql/conf/s1:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
3.主数据库配置
docker exec -it mysql-m1 env LANG=C.UTF-8 /bin/bash
-- 创建slave用户--以后从数据库通过该账号密码访问
CREATE USER 'root'@'%';
-- 设置密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
-- 授予复制权限
GRANT REPLICATION SLAVE ON *.* TO 'root'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
SHOW MASTER STATUS;
4.从数据库配置
docker exec -it mysql-s1 env LANG=C.UTF-8 /bin/bash
从库连接主库
----- 通过docker inspect 实例id 中的IPAddress 是内网地址 172/192开头
CHANGE MASTER TO MASTER_HOST='172.17.0.2',
-----第三步主库配置的用户名
MASTER_USER='root',
-----第三步主库配置的用户密码
MASTER_PASSWORD='123456',
-----mysql 的内部端口,不是映射外部的3316
MASTER_PORT=3306,
-----SHOW MASTER STATUS;获得file
MASTER_LOG_FILE='binlog.000001',
-----SHOW MASTER STATUS;获得position
MASTER_LOG_POS=156;
START SLAVE;
SHOW SLAVE STATUS\G
5.常见问题
- 重启主库 可能会使file和position变化,所以要核对
. - 挂载的配置文件不要指定数据库,先只写个server-id
- 如果从库配置文件没有生效会导致和主库的server-id都是1 冲突了,从库可以设置为2 ,如下
- set global server_id=2
- 保证主从库初始数据一样,不然以后删除了 从表可能会找不到
6.常用命令
stop slave 暂停
reset slave 删除配置
reset master 删除主库的binlog