MySQL 是全球最受欢迎的开源数据库,作为开源软件组合 LAMP(Linux + Apache + MySQL + Perl/PHP/Python)中的重要一环,广泛应用于各类应用。Web2.0 时代,风靡全网的社区论坛软件系统 Discuz 和博客平台 Wordpress 均基于 MySQL 实现底层架构。Web3.0 时代,阿里巴巴、Facebook、Google 等大型互联网公司都采用更为灵活的 MySQL 构建了成熟的大规模数据库集群。阿里云数据库 MySQL 版基于 Alibaba 的 MySQL 源码分支,经过双 11 高并发、大数据量的考验,拥有优良的性能和吞吐量。除此之外,阿里云数据库 MySQL 版还拥有经过优化的读写分离、数据压缩、智能调优等高级功能。
读写分离(Read/Write Splitting)让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),从数据库处理SELECT查询操作,在大规模高并发的系统中,读写分离是提高性能很重要的手段。读写分离实现的基础就是MySQL的主从同步,因此对于主从同步的管理也就显得非常重要。
RDS for MySQL数据同步模式:
RDS for MySQL 5.1主备之间的数据同步采用的是异步的模式,异步模式下性能高,但是缺点是有一定的概率会出现主备之间数据不一致。
RDS for MySQL 5.5主备之间数据同步采用的是半同步的模式,该模式下写性能会有下降,但是优点是主备数据不一致的概率极大的降低了。如果您对数据可靠性要求非常高(比如金融系统),则建议您购买5.5以上(含)版本的RDS for MySQL。
RDS for MySQL 5.6主备之间数据同步采用的是MySQL 5.6的新特性GTID,该特性即能保证性能,又能保证主备数据一致。
MYSQL主从同步的作用:
1.数据分布
2.负载平衡(load balancing)
3.备份(Copy)
4.高可用性(high availability)和容错
主从同步的详细过程如下:
1. 主服务器验证连接。
2. 主服务器为从服务器开启一个线程。
3. 从服务器将主服务器日志的偏移位告诉主服务器。
4. 主服务器检查该值是否小于当前二进制日志偏移位。
5. 如果小于,则通知从服务器来取数据。
6. 从服务器持续从主服务器取数据,直至取完,这时,从服务器线程进入睡眠,主服务器线程同时进入睡眠。
7. 当主服务器有更新时,主服务器线程被激活,并将二进制日志推送给从服务器,并通知从服务器线程进入工作状态。
8. 从服务器SQL线程执行二进制日志,随后进入睡眠状态。
MySQL主从同步的搭建过程:
(1)主从同步环境介绍
操作系统环境:Centos 64 bit
MYSQL版本:MYSQL 5.1
主服务器的IP:192.168.106.1
从服务器的IP:192.168.106.2
(2)在主服务器上建立同步帐号
在设置权限的时候不要将密码设置过于简单:
1 2 |
GRANT REPLICATION SLAVE,FILE ON *.* TO 'replication'@'192.168.106.%' IDENTIFIED BY 'mysqlpassword'; FLUSH PRIVILEGES; |
(3)从服务器配置文件的更改
server-id = 2
replicate-wild-ignore-table=mysql.%
log-slave-updates #这个有需要可以开启
(4)从主服务器得到一个快照版本
如果你的是MYISAM或者既有MYISAM又有INNODB的话就在主服务器上使用如下命令导出服务器的一个快照:
mysqldump -uroot -p --lock-tables --events --triggers --routines --flush-logs --master-data=2 --databases test > db.sql
只有INNODB的话就是用如下命令:
mysqldump -uroot -p --single-transaction --events --triggers --routines --flush-logs --master-data=2 --databases test > db.sql
这里需要注意几个参数的使用:
--single-transaction 这个参数只对innodb适用。
--databases 后面跟除mysql以后的其他所有数据库的库名,我这里只有一个test库。
--master-data 参数会记录导出快照时候的mysql二进制日志位置,一会会用到。
(5)将快照版本还原到从服务器上
mysqldump -uroot -p -h 192.168.106.2 test < db.sql
将快照版本还原到从服务器上以后,此时从服务器上的数据和主服务器的数据是一致的。
(6)在从服务器上使用change master从主服务器上同步
使用grep命令查找到二进制日志的名称以及位置
# grep -i "change master" db.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=106;
生成CHANGE MASTER语句,然后在从上执行
STOP SLAVE;
CHANGE MASTER TO
MASTER_HOST='192.168.106.1',MASTER_USER='replication',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=106;
START SLAVE;
(7)这样就完成了主从同步的搭建,最后使用
SHOW SLAVE STATUS;
查看Slave_IO_Running和Slave_SQL_Running的状态,如果都为Yes,那么就成功了。
注意:不要将同步的信息写入配置文件中,这样不方便管理,尤其是有变动需要重启。
参考:
使用RDS不得不知的注意事项
MySQL数据库的主从同步实现及应用