mysql大库如何搭建备库_Mysql主备集群搭建

本文介绍了如何搭建Mysql主备集群,包括主从备份的原理和具体步骤。主要内容涉及主从复制的三个步骤,详细阐述了从服务器的配置、主从数据库的初始化、权限设置、主从状态检查等关键环节,确保主备状态同步正常。
摘要由CSDN通过智能技术生成

案例背景:

手头的的一个项目,之前生产环境数据库一直用的mysql单节点,虽然写了脚本,每天定时备份数据库,但还是不太保险。最近生产环境逐渐投入使用,于是决定再搭建一台Mysql 数据库,和当前的数据库做成主备集群。

本次案例分享主要包含两方面的内容:

1. Mysql主从备份的原理

2. Mysql主备集群搭建的具体步骤

通过本次案例分析,你将对Mysql主从备份有一个大体的了解,并能独立完成Mysql主备集群搭建。

一. Mysql主从备份的原理

mysql主备复制实现分成以下三个步骤:

1. 主服务器master将改变记录到二进制日志mysql-bin.xxx(binary log)中,这些记录叫做二进制日志事件,binary log events,可以通过show binlog events进行查看。

2. 从服务器slave的I/O线程使用专用帐号登陆到主服务器中读取该二进制文件binary log,并将文件内容写入到自己本地的中继日志relay-log文件中。

3. 从服务器的SQL线程会根据中继日志中的内容执行SQL语句。

在这个主从复制过程中,要求两台服务器有同样的初态。

二. Mysql主备集群搭建案例详解

主服务器:10.10.5.6

从服务器:10.10.5.7

操作系统版本:CentOS7.2.1511

Mysql数据库版本:5.6.33

主服务器10.10.5.6上Mysql是生产环境在用的单节点数据库,从服务器10.10.5.7上只装好了操作系统,mysql数据库还没有搭建。

由于Mysql把安装目录拷贝到另外一台服务器上可以直接启动,故打算将主服务器上的Mysql数据库目录直接copy到从数据库上启动,这样两台数据库服务器将有同样的初态,省去了导数据库的步骤。

1. 停止所有连接主服务器的应用

2. 停止主服务器上的mysql应用。

service mysql stop

3将主服务器上mysql安装目录压缩打包,在从服务器上用scp命令拉取压缩包,放到和主服务器相同的安装目录下,解压,授权。

4.查看主服务器10.10.5.6上my.cnf配置文件如下:

5063c9a40eed5b4e8f5691e0903b013d.png

3b8bcdcf4c025d306dcb588d0b01b6e0.png

b7af8073a5213247ad43c6f6fa4bb76c.png

注意红框圈出来的内容,是一定要有的

5. 查看从服务器10.10.5.7上my.cnf配置文件,确认有如下配置

binlog_format=ROW

log_slave_updates=1

因为my.conf是从主服务器上copy过来的,所以这些配置都是一致的

将从数据库中my.cnf的server_id改成不同于主数据库的值,例如:

server_id = 2

6. 在主服务器和从服务器的my.cnf中加上sql_mode的设置:

sql_mode = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入。在生产环境必须将这个值设置为严格模式。

7. 在这里还需要注意一个问题,数据库中如果存在内存表,在主从同步时,会报错,使同步失败。这是因为无论是基于STATEMENT还是基于ROW复制,都要在二进制日志中包含改变的数据。这就要求在主从机上数据必须一致。当重启从库的时候,你就会丢失内存表的数据,复制中断。

顺便提下,内存表和临时表的区别如下:

临时表:表建在内存里,数据在内存里

内存表:表建在磁盘里,数据在内存里

为了解决这一问题,我们需要在复制的时候忽略内存表,使用选项replicate-ignore-table来对内存表进行忽略。

9b1e1698662f468e7be3a68d7a2a063d.png

可以从information_schema记录的表的数据中,查询ENGINE是MEMORY的表,这些表即为内存表。

replicate-ignore-table=db.memory_table

其中内存表之间用“,”隔开

将排除内存表的配置加到从库10.10.5.7的my.cnf中,为了方便以后万一倒换主备,在主库10.10.5.6的my.cnf中也加上。

8. 启动主从数据库

service mysql start

9.在主数据库创建同步账号

GRANT REPLICATION SLAVE,FILE ON *.* TO 'repadmin'@'10.10.5.6' IDENTIFIED BY '123456' WITH GRANT OPTION;

FLUSH PRIVILEGES;

创建成功后可以在从数据库上登陆一下,看看能否登上。

10. 查看主数据库状态

在主数据库上敲下述指令:

show master status;

9fe3effcf39fbfe54b7d27a210b4ff71.png

11.  建立主从复制slave

在从数据库上敲下述指令:

CHANGE MASTER TO

MASTER_HOST='10.10.5.6',

MASTER_USER='repadmin',

MASTER_PASSWORD='123456',

MASTER_LOG_FILE='bin_log.000012',

MASTER_LOG_POS=120,

MASTER_PROT=3306;

12. 启动SLAVE:

在从数据库上敲下述指令:

START SLAVE;

13. 检查从库slave状态

在从数据库上敲下述指令:

show slave status\G

可以看到

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

这说明主备状态同步正常了

14.数据库主备测试

在主库10.10.5.6上新建一个数据库,在从库10.10.6.7上看下新数据库有没有出现。

在主库上把这个数据库删掉,再到从库上看下这个数据库有没有被删除。

15.启动之前停掉的连接数据库的所有应用,再在应用层面测试一下

参考资料:

https://blog.csdn.net/u013256816/article/details/52536283

https://www.cnblogs.com/ahaii/p/6307648.html

https://www.cnblogs.com/jevo/p/3262227.html

https://www.cnblogs.com/jevo/p/3262227.html

https://www.cnblogs.com/louby/p/8979102.html

这次的案例分享就到这里了,要学的东西还很多,希望通过不断学习,量变引起质变。

下一篇:nginx配置的几个小知识点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值