欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mysql主从备份配置

程序员文章站 2022-04-09 12:48:08
...

准备工作

     两台机器/两个docker mysql容器

配置步骤

  1. 修改配置文件master…cnf(主)
    增加如下:
    [mysqld]
    server-id=1
    #开启二进制记录
    log-bin=mysql-bin
    Mysql主从备份配置

  2. 修改配置文件 slave.cnf(从)
    增加如下:
    server-id=2
    relay-log-index=slave-relay-bin.index
    relay-log=slave-relay-bin

Mysql主从备份配置
3.容器启动

docker run -p 3306:3306 --name mastermysql -v /usr/soft/webapp/mysql/master.cnf:/etc/mysql/conf.d/master.cnf -v /home/data/mysql:/var/lib/mysql -d --restart always -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

docker run -p 3307:3306 --name slavemysql -v /usr/soft/webapp/mysql/slave.cnf:/etc/mysql/conf.d/slave.cnf -v /home/data/mysql/slave01:/var/lib/mysql -d --restart always -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

4.启动容器后进入先进入主mysql(如果没用docker 则跳过此步骤)

docker exec -it mastermysql bash

5.进入mysql后查看master状态
         登录mysql:mysql -u 用户名 -p密码
Mysql主从备份配置
        查看master状态:

show master status \G;

Mysql主从备份配置
6.在Master数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

7.在从数据库Slave 中进入 mysql,配置主数据库

change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 2830, master_connect_retry=30;

参数说明
master_host :Master的地址(如果是容器则输入本机ip)
master_port:Master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

8.查看slave状态

show slave status \G;

Mysql主从备份配置
正常情况下,未开启主从复制过程 Slave_IO_Running和Slave_SQL_Running都是NO

9.开启复制过程

start slave;

10.查看状态

show slave status \G;

正常情况:
Mysql主从备份配置
(恭喜配置完成)

测试

1.登陆两个数据库
Mysql主从备份配置
2.在主数据库中新建数据库 如果没用工具则可以通过命令行来处理
create database test;

Mysql主从备份配置
然后刷新从数据库
Mysql主从备份配置

排错

Mysql主从备份配置
原因:
1.网络不通
2.密码不对
3.pos不对

2.slave_sql_running:No

造成原因:

  • 可能在从数据库上进行了写操作
  • 可能从数据库机器或容器重启,是不回滚造成的

解决办法:
方法一:

 stop slave;
 set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
 start slave;

方法二:
1.停掉slave服务:

stop slave;

2.到主数据库查看状态:

show master status \G;

Mysql主从备份配置
记录File和Position

3.在从数据库slave服务器上执行手动同步

change master to master_host=‘192.168.1.214’, master_user=‘slave’, master_password=‘123456’,
master_port=3306,master_log_file=mysql-bin.000001’,master_log_pos=32734 ;

4.然后启动slave服务

start slave;

注意事项

如果主数据库存在A 库 而从数据库不存在 如果此时删除A库的话 同步会停止 需要重启