MySQL数据库主从同步与单张表主从同步
时间:2019-11-28 19:10 来源:linux.it.net.cn 作者:IT
参考
问题描述:
MySQL数据库是现在常用的数据库,由于一些业务的需求,多个不同服务器上的数据库需要数据同步或者部分数据同步。如何同步?怎么同步才简单?
方案
目前有以下几种方案(参考):
通过逻辑代码层面去实现,定时去更新。比较麻烦需要对比数据库之间数据,耗时,费事,占空间。
通过在源数据建立触发器实现实时同步。缺点是 降低业务系统性能,影响到业务系统
通过日志文件进行同步,有一定的延时。
时间戳:在要同步的源表里有时间戳字段,每当数据发生变化,时间戳会记录发生变化的时间。
数据比较:通过比较两边数据源数据,来完成数据同步。一般用于实时性要求不高的场景。
全表拷贝:定时清空目的数据源,将源数据源的数据全盘拷贝到目的数据源。一般用于数据量不大,实时性要求不高的场景。
MySQL主从同步
参考
主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。
原理说明:
从数据库的IO线程读取主数据库的binlog日志,写入到从数据库的中继日志文件中,从数据库的SQL线程从本机的中继日志中读取SQL命令在本机执行,完成数据同步;
如果主从数据库配置前数据不一致,SQL线程就会报错;如果在主数据库创建授权用户出错,导致从数据库无法连接主数据库,IO线程就会报错;
当从数据库的SQL线程执行中继日志里面的SQL命令失败的时候,SQL线程会立即宕掉
注意:在配置MySQL主从数据库之前,确保从数据库的数据不能多于主数据库的数据
主从同步配置说明:
主上修改my.cnf文件:
server-id=1 #指定主MySQL数据库的ID
log-bin=mysql-bin #启用binglog日志,日志文件保存在MySQL的安装主目录(/var/lib/mysql)下,文件名的格式为"mysql-bin22.000001"(每个文件最大容量500M,超过500M或者重启MySQL服务后自动生成下一个日志文件)
从上修改配置文件 my.cnf:
server-id=2
relay-log=relay-bin
read-only =1
replicate-ignore-db = mysql
replicate-ignore-db = test
replicate-ignore-db = information_schema
replicate-wild-do-table = my_db.stu //所要同步的数据库的单个表
主上 创建 同步的用户:
grant replication client,replication slave on *.* to rep@'192.168.1.3' identified by 'root';
同步到主库(在从上操作):
change master to master_host='192.168.1.4',master_user='rep',master_password='root';
开启slave状态
start slave;
在从上验证
show slave status \G;
#命令执行结果中下面两项显示如下则说明主从同步配置正常
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
从上重置同步 :
reset slave;
从上停止同步:
stop slave;
(责任编辑:IT)
参考 问题描述: MySQL数据库是现在常用的数据库,由于一些业务的需求,多个不同服务器上的数据库需要数据同步或者部分数据同步。如何同步?怎么同步才简单? 方案 目前有以下几种方案(参考): 通过逻辑代码层面去实现,定时去更新。比较麻烦需要对比数据库之间数据,耗时,费事,占空间。 通过在源数据建立触发器实现实时同步。缺点是 降低业务系统性能,影响到业务系统 通过日志文件进行同步,有一定的延时。 时间戳:在要同步的源表里有时间戳字段,每当数据发生变化,时间戳会记录发生变化的时间。 数据比较:通过比较两边数据源数据,来完成数据同步。一般用于实时性要求不高的场景。 全表拷贝:定时清空目的数据源,将源数据源的数据全盘拷贝到目的数据源。一般用于数据量不大,实时性要求不高的场景。 MySQL主从同步 参考 主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。 原理说明: 从数据库的IO线程读取主数据库的binlog日志,写入到从数据库的中继日志文件中,从数据库的SQL线程从本机的中继日志中读取SQL命令在本机执行,完成数据同步; 如果主从数据库配置前数据不一致,SQL线程就会报错;如果在主数据库创建授权用户出错,导致从数据库无法连接主数据库,IO线程就会报错; 当从数据库的SQL线程执行中继日志里面的SQL命令失败的时候,SQL线程会立即宕掉 注意:在配置MySQL主从数据库之前,确保从数据库的数据不能多于主数据库的数据 主从同步配置说明: 主上修改my.cnf文件: server-id=1 #指定主MySQL数据库的ID log-bin=mysql-bin #启用binglog日志,日志文件保存在MySQL的安装主目录(/var/lib/mysql)下,文件名的格式为"mysql-bin22.000001"(每个文件最大容量500M,超过500M或者重启MySQL服务后自动生成下一个日志文件) 从上修改配置文件 my.cnf: server-id=2 relay-log=relay-bin read-only =1 replicate-ignore-db = mysql replicate-ignore-db = test replicate-ignore-db = information_schema replicate-wild-do-table = my_db.stu //所要同步的数据库的单个表 主上 创建 同步的用户: grant replication client,replication slave on *.* to rep@'192.168.1.3' identified by 'root'; 同步到主库(在从上操作): change master to master_host='192.168.1.4',master_user='rep',master_password='root'; 开启slave状态 start slave; 在从上验证 show slave status \G; #命令执行结果中下面两项显示如下则说明主从同步配置正常 Slave_IO_Running:Yes Slave_SQL_Running:Yes 从上重置同步 : reset slave; 从上停止同步: stop slave; (责任编辑:IT) |