docker搭建MySQL集群(1主1从)

1.创建挂载路径及配置文件my.cnf,挂载mysql的数据、配置、日志

/usr/mydata/mysql/conf/s1
/usr/mydata/mysql/conf/m1

在这里插入图片描述
my.cnf先只写server-id,保证主从不同
docker搭建MySQL集群(1主1从)_第1张图片

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;

docker搭建MySQL集群(1主1从)_第2张图片

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; 

在这里插入图片描述
docker搭建MySQL集群(1主1从)_第3张图片

START SLAVE;
SHOW SLAVE STATUS\G

docker搭建MySQL集群(1主1从)_第4张图片

5.常见问题

  1. 重启主库 可能会使file和position变化,所以要核对
    .docker搭建MySQL集群(1主1从)_第5张图片
  2. 挂载的配置文件不要指定数据库,先只写个server-id
  3. 如果从库配置文件没有生效会导致和主库的server-id都是1 冲突了,从库可以设置为2 ,如下
  4. set global server_id=2
  5. 保证主从库初始数据一样,不然以后删除了 从表可能会找不到

docker搭建MySQL集群(1主1从)_第6张图片

6.常用命令
stop slave 暂停
reset slave 删除配置
reset master 删除主库的binlog

你可能感兴趣的:(学习,mysql,docker,数据库)