以docker部署mysql为例

文档:https://www.xdx97.com/article/712671146654302208

docker 安装 mysql8 容器

安装mysql8容器命令

  1. //主
  2. docker run -p 3306:3306 --name mysql-master -v /public/mysql-master/conf:/etc/mysql/conf.d -v /public/mysql-master/logs:/logs -v /public/mysql-master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8 --lower_case_table_names=1
  3. //从
  4. docker run -p 3307:3307 --name mysql-salve -v /public/mysql-salve/conf:/etc/mysql/conf.d -v /public/mysql-salve/logs:/logs -v /public/mysql-salve/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8 --lower_case_table_names=1

mysql8 默认区分大小写, 设置为不区分大小写 —lower_case_table_names=1

配置主服务器

配置主服务器的 my.cnf

如果在/public/mysql-master/conf 目录下没有my.cnf文件,可手动创建my.cnf文件
添加下面内容

  1. [mysqld]
  2. ## 同一局域网内注意要唯一
  3. server-id=1
  4. ## 开启二进制日志功能,可以随便取(关键)
  5. log-bin=mysql-bin

重启服务

可通过重启docker的mysql容器

  1. docker restart (容器ID)

查看 skip_networking 的状态

  1. show variables like '%skip_networking%';

image.png
确保在主服务器上 skip_networking 选项处于 OFF 关闭状态, 这是默认值。
如果是启用的,则从站无法与主站通信,并且复制失败。

连接mysql服务器

  1. docker exec -it (容器ID) /bin/bash
  2. mysql -uroot -p
  3. 输入密码连接mysql

创建一个专门用来复制的用户

  1. CREATE USER 'repl'@'%' identified by '123456';
  2. GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

配置从服务器

配置从服务器的 my.cnf

  1. [mysqld]
  2. server-id=2

slave-skip-errors=1062,1053,1146 #跳过指定error no类型的错误 slave-skip-errors=all #跳过所有错误 replicate-do-db=test #指定复制test库 replicate-ignore-db=test2 #指定不复制test2库 replicate-do-table=test.rep_t1 #指定复制test库的rep_t1表 replicate-ignore-table=test.rep_t3 #过滤test库的rep_t3表

重启服务

如上

连接上mysql服务器

命令如上

配置连接到主服务器的相关信息

在从服务器配置连接到主服务器的相关信息 (在容器里面的mysql执行)

  1. CHANGE MASTER TO MASTER_HOST='xxxxx', MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='123456';

上面代码的xxxxx你需要换成你的IP,docker 查看容器 IP 的命令如下:

  1. docker inspect --format=’{{.NetworkSettings.IPAddress}}’ 容器名称/容器id

如果两个mysql服务在不同的服务器下,不需查询IP

启动的那个从服务器的线程

  1. start slave;

image.png

查看同步状态

  1. show slave status \G;

image.png