linux的mysql主从备份_linux 的mysql 主从备份

1、原理

70c5585009e3f0efd3b8882e4a70c00d.png

mysql主从配置的流程大体如图:

1)master会将变动记录到二进制日志里面;

2)master有一个I/O线程将二进制日志发送到slave;

3) slave有一个I/O线程把master发送的二进制写入到relay日志里面;

4)slave有一个SQL线程,按照relay日志处理slave的数据;

stop slave 停止;start slave 启动;reset slave

RESET MASTER

删除所有index file 中记录的所有binlog 文件,将日志索引文件清空,创建一个新的日志文件,这个命令通常仅仅用于第一次用于搭建主从关系的时的主库,

注意

reset master 不同于purge binary log的两处地方

1 reset master 将删除日志索引文件中记录的所有binlog文件,创建一个新的日志文件 起始值从000001 开始,然而purge binary log 命令并不会修改记录binlog的顺序的数值

2 reset master 不能用于有任何slave 正在运行的主从关系的主库。因为在slave 运行时刻 reset master 命令不被支持,resetmaster 将master 的binlog从000001 开始记录,slave 记录的master log 则是reset master 时主库的最新的binlog,从库会报错无法找的指定的binlog文件。

二、操作步骤

按照原理,我们开启mysql主从复制,我们大体需要做以下操作:

1)开启master的二进制日志

2)开启slave的二进制日志

3)将slave指向master

4)开始复制

三、开启master二进制日志

1)编辑mysql的配置文件,使用命令:

vim /etc/my.cnf

2)添加二进制日志配置,开启二进制(master-bin只是日志文件名称,可以自己指定)

log-bin=master-bin

server-id=1

注意:server-id是要指定的,不然会报错,每一台指定一个唯一标识符

四、授权

我们需要给slave配置一个用户/密码的权限

mysql>GRANT REPLICATION SLAVE ON *.* TO '用户名'@'slave数据库的IP地址' IDENTIFIED BY '密码';

这行命令的意思是:允许在某个IP地址的某个用户以某个密码对当前数据库的所有库和所有表进行复制操作

注意:以上配置了权限,我们需要刷新以下权限使用命令:

mysql>flush privileges;

或者直接重启mysql服务:

service mysql restart;

五、查看以下master的状态

其实主要是查看以下master的日志文件名字,以及文件所在的位置,使用命令:

show master status;

可以看到类似如下信息:

+-------------------+----------+--------------+------------------+-------------------+

| File| Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+-------------------+----------+--------------+------------------+-------------------+

| master-bin.000001 | 1516 ||| |

+-------------------+----------+--------------+------------------+-------------------+

File: 日志文件名称

Position: 日志所在位置

六、开启slave的二进制日志

进入slave的服务器

1)编辑mysql的配置文件,使用命令:

vim /etc/my.cnf

2)添加二进制日志配置,开启二进制(relay-bin只是日志文件名称,可以自己指定)

log-bin=relay-bin

server-id=2

slave-skip-errors=all

注意:server-id是要指定的,不然会报错,每一台指定一个唯一标识符

slave-skip-errors=all,跳过所有错误日志

七、将slave指向master

48304ba5e6f9fe08f3fa1abda7d326ab.png

mysql>CHANGE MASTER TO

->MASTER_HOST='master所在服务器的IP',

->MASTER_USER='master授权的账号',

->MASTER_PASSWORD='master授权的密码',

->MASTER_LOG_FILE='master的日志文件名',

->MASTER_LOG_POS=master的日志所在位置;

48304ba5e6f9fe08f3fa1abda7d326ab.png

如果master_log_pos=0;系统会自动匹配的.

八、开始主从复制

在slave上执行

mysql>start slave;

我们可以查看slave的运行状态:

show slave status\G;

可以看到类似如下内容:

48304ba5e6f9fe08f3fa1abda7d326ab.png

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: master的IP地址

Master_User: root

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: master-bin.000001

Read_Master_Log_Pos: 1516

Relay_Log_File: slave-bin.000004

Relay_Log_Pos: 1117

Relay_Master_Log_File: master-bin.000001

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

......

48304ba5e6f9fe08f3fa1abda7d326ab.png

注意:

Slave_IO_Running: YES 表示slave的日志读取线程开启

Slave_SQL_Running: YES 表示SQL执行线程开启

如果有主从复制有错误信息其实也可以看到

九、测试

以上我们就将主从复制功能设置完毕了,我们可以通过在master里面创建数据库,或者表,插入数据等来测试一下

十、注意点

1)开启了主从复制,slave库如果写入数据的话,可能导致数据回滚从而主从复制线程中断,可以通过以下方式解决:

mysql> stop slave;

mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

mysql> start slave;

2)如果要停止slave的复制可以使用命令:

mysql>stop slave;

3)由于主从复制是基于I/O的日志,所以会存在一定延时,如果对数据一致性要求非常高的话,简单的主从复制在实际环境中会存在问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值