docker中MySQL8主从复制配置搭建(超清楚)

MySQL8主从复制配置

1. 首先从docker拉取最新的MySQL,并且运行配置

  1. 拉取最新镜像文件

    docker pull mysql

  2. 运行镜像

    docker run --name mysql-master -p 3301:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql

  3. 查看镜像是否运行成功(若STATUS是 UP 时间 ,就是正在运行中)

    docker ps -a

  4. 进入容器内部

    docker exec -it mysql-master bash

  5. 命令说明:

    1. --name 后面跟着的是容器的名字,自己可以自定义
    2. -p 指的是端口映射 本机端口:容器端口,本人选用的本机端口是3301,大家可以根据自己电脑情况选择端口
    3. -e 指的是启动参数,这个MYSQL_ROOT_PASSWORD参数必须要传,否则等下登录不了MySQL, MYSQL_ROOT_PASSWORD意思是root用户的密码,大家可以自定义
    4. -d 代表后台启动 后面跟的就是镜像的名字,因为之前拉取的时候就是docker pull mysql,所以这个写mysql,如果是 docker pull mysql:5.7 那么这里就是 -d msyql:5.7

2.刚才运行的那一个MySQL作为主机,那么我们现在来配置主机的参数

  1. 首先进入容器

    docker exec -it mysql-master bash

  2. 然后安装一下vim,因为这个容器是最简Linux,所以不带vi和vim,我们先更新一下apt-get,否则等下安装vim会报错

    apt-get update

    apt-get install vim -y

  3. 然后编辑MySQL配置文件

    vim /etc/mysql/conf.d/mysql.cnf

  4. 添加以下配置(文字不要复制进去了,只是说明)

    [mysqld]

    服务id,在一个主从复制集群中要唯一,值范围1-255

    server-id = 1

    开启log-bin日志,非常重要,复制原理也是基于这一个,后面的值随便写我这里就写mysql-master-bin了

    log-bin = mysql-master-bin

    从机复制时,忽略的数据库,也就是说这里配置的数据库不会被从机同步

    binlog-ignore-db = mysql,information_schema,performance_schema,sys

  5. 然后去登录MySQL,修改root用户密码插件

    mysql -uroot -p123456

    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

    FLUSH PRIVILEGES;

WITH mysql_native_password这句话非常重要,如果不写这句话也能够修改密码,但是使用的时默认的密码插件

​ 是caching_sha2_password,会导致后面从机连接不上

​ 然后使用exit退出mysql,再使用exit退出容器

  1. 重启容器

    docker stop mysql-master

    docker start mysql-master

  2. 再次使用上面的命令进入容器内部, 登录MySQL,使用命令查看主机状态

    show master status;

此时会出来一个表,一定要记住File和Position字段的值,后面会用到

到这个时候主机就算是配置完成了接着我们去配置从机

3.配置从机

准备工作

  1. 在cmd命令窗口中,不是docker容器内哦,使用命令查看主机IP地址,此ip地址,是容器本身的ip,用来标识每个容器的

    docker inspect mysql-master | grep IPAddress

  2. 然后你就可以得到主机容器的ip地址,可以打开记事本先记着

  3. 再次进入主机容器内部,此步骤是为了得到主机中File和Position字段的值,如果你之前已经记住了,此步骤可以省略

    mysql -uroot -p123456

    show master status;

  4. 记住这个时候File和Position字段的值,可以先写在记事本中

  1. 使用命令再次启动一个MySQL镜像, 镜像名称改一下,端口改一下就行了

    docker run --name mysql-slave -p 3302:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql

  2. 不放心照样可以查看一下容器的运行情况

    docker ps -a

  3. 使用命令进入容器内部

    docker exec -it mysql-slave bash

  4. 使用apt-get再次安装一下vim

    apt-get update

    apt-get install vim -y

  5. 安装好之后编辑MySQL的配置文件

    vim /etc/mysql/conf.d/mysql.cnf

  6. 添加内容,server-id不重复即可,只需要添加这一句就行了

    [mysqld]

    server-id = 2

  7. 然后退出容器,重启mysql-slave容器

  8. 设置从机中主机的配置,在MySQL中使用命令

    **master_host **:主机容器ip,准备工作里面要大家查的那一个,大家写自己容器的就行

    master_user:写主机root用户就好,因为root权限多,操作方便,大家都懂得

    master_password:就是主机用户的密码,master_user用户写的谁,就是谁的密码

    master_log_file:主机中查出来的File字段的值

    master_log_pos:主机中查出来的Position的值

    change master to
    master_host='172.17.0.2',
    master_user='root',
    master_password='123456',
    master_log_file='mysql-master-bin.000003',
    master_log_pos=157;

  9. 启动slave,使用命令

    start slave;

  10. 查看slave状态

    show slave status \G

  11. 如果SlaveIORunning 和 SlaveSQLRunning的值都是Yes,代表你配置成功了,可以使用连接工具连接主机,然后建一个数据库,再建一个表,添加一点数据,再连接从机,查看数据是否同步过来了

4. 排错阶段

  1. 如果SlaveIORunning 和 SlaveSQLRunning的值不是Yes,或者只有其中一个是Yes,都代表失败,常见错误原因有
    • master_log_file或者master_log_pos属性写错了
    • 没有使用WITH mysql_native_password插件修改密码
    • 有时候主机的File和Position字段随着中间的什么操作而改变了,所以如果连接不上还可以回去查看一下主机的这两个属性是否和你设置的属性值一一对应,如果错了,重新执行change master to那一段命令即可
    • server-id重复了,这点一定要注意,如果配置失败,记得回去看一下,一个一个的排查,耐心一点

以上就是在docker中MySQL8搭建主从复制的全部过程,希望大家一次成功,如果有什么别的错误,或者什么地方写的不好,请留言,我会查看的,谢谢大家的观看

上一篇:为什么国外程序员加班少?他们这样评价国内996的!


下一篇:连接mysql8的配置文件