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搭建主从复制的全部过程,希望大家一次成功,如果有什么别的错误或者写的不好的地方,请留言,我会查看的,谢谢大家的观看

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
1. 拉取mysql8.0镜像 ``` docker pull mysql:8.0 ``` 2. 创建主从复制网络 ``` docker network create mysql-replication ``` 3. 创建主库容器 ``` docker run -d --name mysql-master \ -e MYSQL_ROOT_PASSWORD=123456 \ -e MYSQL_DATABASE=test \ --network mysql-replication \ mysql:8.0 \ --server-id=1 \ --log-bin='mysql-bin-1.log' \ --binlog-do-db=test \ --binlog-ignore-db=mysql \ --skip-host-cache \ --skip-name-resolve ``` 参数说明: - `--name`:容器的名称 - `-e MYSQL_ROOT_PASSWORD`:设置root用户的密码 - `-e MYSQL_DATABASE`:创建一个名为test的数据库 - `--server-id`:设置服务器唯一ID,必须唯一,从库也要设置不同的ID - `--log-bin`:开启二进制日志,并设置日志文件名 - `--binlog-do-db`:只记录指定的数据库的操作 - `--binlog-ignore-db`:忽略指定的数据库的操作 - `--skip-host-cache`:不缓存DNS查询结果 - `--skip-name-resolve`:禁用DNS反向查找功能 4. 创建从库容器 ``` docker run -d --name mysql-slave \ -e MYSQL_ROOT_PASSWORD=123456 \ -e MYSQL_DATABASE=test \ --network mysql-replication \ mysql:8.0 \ --server-id=2 \ --log-bin='mysql-bin-1.log' \ --binlog-do-db=test \ --binlog-ignore-db=mysql \ --skip-host-cache \ --skip-name-resolve \ --slave-skip-errors=all \ --slave-net-timeout=60 \ --skip-slave-start \ --master-host=mysql-master \ --master-user=root \ --master-password=123456 \ --master-port=3306 \ --master-connect-retry=60 ``` 参数说明: - `--slave-skip-errors=all`:忽略所有的错误,避免因为一些错误导致复制断 - `--slave-net-timeout=60`:设置从库连接主库的时时间为60秒 - `--skip-slave-start`:启动容器后不自动启动从库 - `--master-host`:指定主库的地址,这里使用了主从复制网络主库的容器名称 - `--master-user`:指定连接主库的用户名 - `--master-password`:指定连接主库的密码 - `--master-port`:指定主库的端口 - `--master-connect-retry`:连接主库失败后重试的间隔时间 5. 开启从库 ``` docker exec -it mysql-slave mysql -uroot -p123456 -e "start slave;" ``` 6. 查看主从复制状态 ``` docker exec -it mysql-master mysql -uroot -p123456 -e "show master status;" docker exec -it mysql-slave mysql -uroot -p123456 -e "show slave status\G;" ``` 如果复制正常,Slave_IO_Running 和 Slave_SQL_Running 都为 Yes。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值