MySQL同步0531.docx
- 文档编号:2775064
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:14
- 大小:596.05KB
MySQL同步0531.docx
《MySQL同步0531.docx》由会员分享,可在线阅读,更多相关《MySQL同步0531.docx(14页珍藏版)》请在冰豆网上搜索。
MySQL同步0531
MySQL同步
(一)MySQL同步原理图
(二)常用的同步架构
(三)同步搭建
(1)一主一从
(2)主主结构
(3)一主多从
(4)高可用性
(5)第三方软件
(四)其他进阶操作
(1)动态添加从机
(2)状态监控
(3)特殊场景及处理
1)延时
2)跳过错误
3)同步指定库,指定表
4)单独运行IO及SQL线程
5)其他
(一)MySQL同步原理图
1)Statement-basedreplication
2)Row-basedreplication
3)原理概述图
(二)常用的同步架构
(1)一主一从
(2)主主结构
(3)一主多从
(三)同步搭建
环境:
主机名称
IP地址
系统
数据库版本
master
192.168.116.129
CentOS5.4
mysql-5.1.48.tar.gz
slave
192.168.116.131
CentOS5.4
mysql-5.1.48.tar.gz
(1)一主一从
Master服务器,修改server-id、开启二进制日志、及为从机授权
[root@masteropt]#vim/etc/f
[mysqld]
log-bin=mysql-bin
server-id=1
mysql>grantreplicationslaveon*.*torepl@'192.168.16.131'identifiedby'123456';
mysql>flushprivileges;
mysql>showgrantsforrepl@'192.168.116.131';
备注:
对innodb来说,为了保证持久性及一致性,配置文件应添加
[root@masteropt]#vim/etc/f
[mysqld]
innodb_flush_log_at_trx_commit=1
sync_binlog=1
Slave服务器,修改server-id、开启二进制日志
[root@masteropt]#vim/etc/f
[mysqld]
log-bin=mysql-bin
server-id=1
至此,配置修改完成,下面为操作为保证master和salve上的数据一致,
然后再开启slave上的同步进程
场景1:
master和slave上的数据库
1)初始化新安装
2)未新建任何应用库
3)未对外提供服务
操作:
master服务器:
Slave服务器:
执行命令:
mysql>CHANGEMASTERTOMASTER_HOST='192.168.116.129',MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='123456',Master_Log_File='mysql-bin.000001',Master_Log_Pos=81639521;
mysql>startslave;
mysql>showslavestatus\G
同步完成,类似如下状态:
场景2:
master和slave上的数据库
1)master已新建库,并已包含数据
2)master服务未对外提供服务
操作:
保证主库与从库数据一致,然后再开启从库的同步操作
方法:
1)利用mysqldump
[root@masteropt]#mysqldump--all-databases--lock-all-tables>all_dbback.sql
或者添加master-data参数,自动带有changemaster的定位信息:
[root@masteropt]#mysqldump--all-databases--master-data>all_dbback.sql
将导出来的数据到slave库上恢复。
2)拷贝数据文件
mysql>showvariableslike'datadir';--获取数据库数据库位置
[root@masteropt]#mysqladminshutdown--关闭数据库,确保一致性
将数据库目录打包或者其他方法拷贝到slave服务器
启动master数据库,启动slave数据库、开启同步。
场景3:
master和slave上的数据库
1)master应用库已对外提供服务,并不断有访问及数据更新
此操作在动态添加从库介绍
(2)主主结构:
与主从结构不同之处:
利用auto_increment_increment、auto_increment_offset控制auto_increment的值
计算方法:
auto_increment=auto_increment_offset+N*auto_increment_increment
如,主库:
auto_increment_offset=1、auto_increment_increment=2
1+1*2、1+2*2、1+3*2、1+4*2
auto_increment=1、3、5、7、9
从库:
auto_increment_offset=2、auto_increment_increment=2
2+1*2、2+2*2、2+3*2、2+4*2
auto_increment=2、4、6、8、10
来确保当2个数据库同时进行insert插入时,不会产生auto_increment主键冲突;
由此来达到2个数据库可以同时进行数据插入的效果。
具体操作:
修改配置文件:
master1:
[root@masteropt]#vim/etc/f
[mysqld]
auto_increment_offset=1
auto_increment_increment=2
master2
[root@master2opt]#vim/etc/f
[mysqld]
auto_increment_offset=2
auto_increment_increment=2
备注:
1)由于解决不了2台服务器之间的全局事务一致性,
此模式只能算作主从模式的一种改进,可用于HA方案中的主从快速切换。
2)同时,即使解决了全局事务一致性,在写入和修改比较频繁的场景下,
由于auto_increment的不连续性,将会产生大量的数据碎片,
导致数据库变慢。
(3)一主多从:
1)一主多从
场景:
可用于写入较少,主库压力不大且读取频繁的场景,主要用于读写分离
2)一主一从多从
原因:
由于在主库上进行的所有DML语句都会复制到从库
(即使指定了replicate-do-db),当从库较多时,将会对主库造成较大的压力,即占用主库的CPU、IO、及带宽资源,为保证主库效率,可以在主库后只对应一个从库,再由此从库对其他从库进行分发。
(4)高可用性:
场景:
主要用于主从模式或者主主模式下,当因电源故障、网络故障、服务器故障或mysqlbug,造成的服务器down机、网络中断、或者mysql服务异常退出而导致mysql无法正常对外提供服务时,另外一台MysQL服务能及时发现,并即时接管并对外提供服务;尽量减少服务中断时间。
备注:
5.5版本开始支持半同步复制,5.5之前及5.1版本都为异步复制。
也就是说,5.1版本之前,master不会监控相应的sql是否已传到slave服务器。
5.5版本,支持半同步复制,至少确定sql已传送到一个slave上,然后才将结果返送回客户端,但也只是确保已传送到,并不确保slave已执行。
Mysql同步的这种不完整性,导致了:
1)主库和从库的同步状态需要监控
2)在对数据完整性要求很严格的情况下,发生主从切换时,
都需要DBA对数据完整性进行审查和确认
3)对跨机房及跨地域的mysql复制,需要定期检查数据完整性
实现:
lvs、keepalived或其他的硬件均衡负载设备。
keepalived具体实施步骤,可参见相关文档。
(5)第三方软件
1)MMM-----Multi-MasterReplicatioinManagerforMySQL
适用于管理大规模MySQL主从关系也是一个很好的HA实施方案,
同时对MySQL的针对性也很强
具体实施方案,可参见:
2)amoeba读写分离+MMM
具体实施,可参见:
(四)其他进阶操作
(1)动态添加从机
所有的需求及操作都应按照实际的生产环境来进行,场景不同,采用的方法也不同。
场景1:
当前master库负载较低,业务应用可以承受一定时间内数据无法写入。
mysql>flushtableswithreadlock;--对主库加读锁,只允许读,不允许写
mysql>showmasterstatus;--获取当前主库日志的名称及位置
再将主库上的数据导出
mysql>unlocktables;--释放读锁,让数据库恢复正常状态
将数据在从库上进行恢复
设置主从
开启同步
场景2:
当前主库负载较高,且业务应用不允许数据库服务器任何的中断
此时,为了获取与主库数据的一致性,应用mysqldump或者Xtrabackup
mysqldump--F--single-transaction-uxxx-pxxxdbname>dbname.sql
mysql>showmasterlogs;--获取最新的日志文件名称
将备份出的数据在从库上进行恢复
设置主从
指定从库从master最新二进制日志的开始位置开始读取
开启同步
(2)状态监控
从机:
Mysql>showslavestatus;
比较重要的参数:
Slave_IO_State、Slave_IO_Running、Slave_SQL_Running、Seconds_Behind_Master
正常情况下,其对应的值:
Slave_IO_State:
Waitingformastertosendevent
Slave_IO_Running:
Yes
Slave_SQL_Running:
Yes
Seconds_Behind_Master:
0
(3)特殊场景及处理
1)延时
原因:
1.从MySQL本身设计原因,从库的SlaveSQL进程只有一个。
当主库处于并发操作,且负载高时,从库的单sql进程的执行速度无
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MySQL 同步 0531