搭建mysql主从服务

搭建mysql主从服务

[!TIP]

基于docker和mysql 8搭建主从服务,一主二从的结构,并且把数据文件放置在master_slave_mysql 文件夹下

首先规划端口,master:3306,slave_one:3307,slave_two:3308

  1. 创建文件&文件夹
mkdir -p /root/master_slave_mysql/mysql_3306/conf \
				 /root/master_slave_mysql/mysql_3306/data \
				 /root/master_slave_mysql/mysql_3307/conf \
				 /root/master_slave_mysql/mysql_3307/data \
				 /root/master_slave_mysql/mysql_3308/conf \
				 /root/master_slave_mysql/mysql_3308/data \
touch /root/master_slave_mysql/mysql_3306/conf/my.cnf
      /root/master_slave_mysql/mysql_3307/conf
      /root/master_slave_mysql/mysql_3308/conf

可以按照自己的喜好创建到不同的位置

  1. 修改配置

    /root/master_slave_mysql/mysql_3306/conf/my.cnf加入

    [mysqld]
    # 服务器唯一ID,默认值1
    server-id=1
    # 设置日志格式,默认ROW
    binlog_format=STATEMENT
    

    /root/master_slave_mysql/mysql_3307/conf/my.cnf加入

    [mysqld]
    # 服务器唯一ID,默认值1
    server-id=2
    

    /root/master_slave_mysql/mysql_3308/conf/my.cnf加入

    [mysqld]
    # 服务器唯一ID,默认值1
    server-id=3
    

    [!NOTE]

    server-id 在主从架构中是不能重复的,建议把主机设置为1,从机设置为其他值

  2. 拉取mysql镜像

    docker pull mysql:latest
    
  3. 创建主mysql容器

    docker run -d -p 3306:3306 \
      -v /root/master_slave_mysql/mysql_3306/conf/etc/mysql/conf.d \
      -v /root/master_slave_mysql/mysql_3306/data:/var/lib/mysql \
      -e MYSQL_ROOT_PASSWORD=自定义密码 \
      --name=master mysql:latest
    
  4. 创建从slave容器

    1. 创建第一个slave容器

      docker run -d -p 3307:3306 \
      -v /root/master_slave_mysql/mysql_3307/conf/etc/mysql/conf.d \
      -v /root/master_slave_mysql/mysql_3307/data:/var/lib/mysql \
      -e MYSQL_ROOT_PASSWORD=自定义密码 \
      --name=slave_one mysql:latest
      
    2. 创建第二个slave容器

      docker run -d -p 3308:3306 \
      -v /root/master_slave_mysql/mysql_3308/conf/etc/mysql/conf.d \
      -v /root/master_slave_mysql/mysql_3308/data:/var/lib/mysql \
      -e MYSQL_ROOT_PASSWORD=自定义密码 \
      --name=slave_two mysql:latest
      
  5. 配置主机

    进入容器

    docker exec -it master env LANG=C.UTF-8 /bin/bash
    

    配置从机用于登录主机的用户

    mysql -uroot -p
    
    add user 'slave'@'%' identified with mysql_native_password by '123456';
    

    授权

    GRANT REPLICATION SLAVE ON *.* TO `slave_account`@`%`
    

    [!WARNING]

    上例授权范围在生产环境中是不被允许的,建议授权只到业务数据库,而不要授权全部数据库!比如:GRANT REPLICATION SLAVE ON order_server.* TO `slave_account`@`%`

    刷新权限

    flush privileges;
    

    查看状态(记住fileposition字段的值,我的是binlog.000003和3049)

    show master status;
    

    OK,到此主机配置结束了,然后退出容器(退出命令exit,需退出2次,第一次退出mysql,第二次退出容器)

  6. 配置从机(从机的配置步骤都一样,为节省篇幅仅拿一台从机配置说明配置步骤)

    进入容器

    docker exec -it slave_one env LANG=C.UTF-8 /bin/bash
    
    mysql -uroot -p
    

    执行(注意master_log_pos和master_log_file的值)

    CHANGE master to
        master_host = '主机IP',
        master_port = 3306,
        master_user='slave',
        master_password='123456',
        master_log_file ='binlog.000003',
        master_log_pos=3049;
    

    运行复制服务

    START SLAVE;
    

    [!NOTE]

    stop slave : 停止复制服务

    当遇到错误提示:This operation cannot be performed with a running replica io thread; run STOP REPLICA IO_THREAD FOR CHANNEL ‘’ first时,请执行 STOP REPLICA IO_THREAD FOR CHANNEL ‘’

    验证是否成功

    show slave status \G;
    

    出现如下:Slave_IO_Running: Yes,Slave_SQL_Running: Yes 则成功;若不成功,请看Last_IO_Error和Last_SQL_Error中的表述

    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for source to send event
                      Master_Host: xxx.xx.xxx.xxx
                      Master_User: slave_account
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: binlog.000003
              Read_Master_Log_Pos: 3049
                   Relay_Log_File: a066fb82d4ba-relay-bin.000002
                    Relay_Log_Pos: 594
            Relay_Master_Log_File: binlog.000003
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                ...
                Last_IO_Errno: 0
                Last_IO_Error: 
                Last_SQL_Errno: 0
                Last_SQL_Error:
                ...
    

    [!WARNING]

    • 在主从架构配置完成之前,不要对主/从数据库做:增删数据库和表以及增删查改数据的操作。

    • 主从架构配置完成之后,不要对从表做增删改的操作,无论是对表,数据库,行,都不要做。不然可能出现失败

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值