MySQL数据库主从同步实现

简介: MySQL 是全球最受欢迎的开源数据库,作为开源软件组合 LAMP(Linux + Apache + MySQL + Perl/PHP/Python)中的重要一环,广泛应用于各类应用。
+关注继续查看

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数据库的主从同步实现及应用

 

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
8月前
|
SQL 关系型数据库 MySQL
MySql字符串拆分实现split功能(字段分割转列、转行)
MySql字符串拆分实现split功能(字段分割转列、转行)
MySql字符串拆分实现split功能(字段分割转列、转行)
|
8月前
|
SQL 缓存 关系型数据库
MySQL日志(undo log 和 redo log 实现事务的原子性/持久性/一致性)
MySQL日志(undo log 和 redo log 实现事务的原子性/持久性/一致性)
MySQL日志(undo log 和 redo log 实现事务的原子性/持久性/一致性)
|
8月前
|
SQL 关系型数据库 MySQL
C语言连接并实现对MySQL的增删改查
C语言访问数据库并不如Java、Python那般容易。本文介绍C语言连接并实现对MySQL的增删改查的方法。
301 0
|
8月前
|
canal 关系型数据库 MySQL
基于 Docker 结合 Canal 实现 MySQL 实时增量数据传输
基于 Docker 结合 Canal 实现 MySQL 实时增量数据传输
基于 Docker 结合 Canal 实现 MySQL 实时增量数据传输
|
8月前
|
Prometheus 监控 Cloud Native
手把手教你Prometheus + Granafa实现mysql 性能监测部署
数据库性能监控可以说是十分重要,能否自行搭建环境实现像阿里云或是腾讯云那样直观的展示不同维度数据的功能?答案是肯定的。下面详细说明一下安装部署过程以及过程中出现的问题,希望对你有所帮助!
手把手教你Prometheus + Granafa实现mysql 性能监测部署
|
8月前
|
SQL 前端开发 关系型数据库
mysql实现一次将多条不同sql查询结果并封装到一个结果集
最近遇到一个统计查询需求,要求一次性查询多个统计信息,其中两个查询信息不在一个表中,也没有业务关联,表中也没有做连接处理。不考虑产品设计是否合理,完全是实际需求如此,需要一次性查询出来返回给前端进行展示,对于这种“非常规”的统计查询平常肯定会遇见,感觉有点代表性,所以简单记录一下。希望对有相同需求的同学可以作为参考。
mysql实现一次将多条不同sql查询结果并封装到一个结果集
|
8月前
|
SQL 关系型数据库 MySQL
mysql实现统计同一字段不同状态的总数量之case when
直接进入主题,简单说下case when的语法.
|
8月前
|
SQL 关系型数据库 MySQL
脚本实现:从 HIVE 中导入数据到 MYSQL
脚本实现:从 HIVE 中导入数据到 MYSQL
|
8月前
|
Ubuntu 关系型数据库 MySQL
Linux:Ubuntu安装jdk、tomcat、mysql,以及实现Tomcat开机自启动
Linux:Ubuntu安装jdk、tomcat、mysql,以及实现Tomcat开机自启动
216 0
Linux:Ubuntu安装jdk、tomcat、mysql,以及实现Tomcat开机自启动
|
8月前
|
canal SQL 关系型数据库
10.【canal】canal从入门到放弃-mysql+canal+rocketmq实现数据库同步-canal简单使用
【canal】canal从入门到放弃-mysql+canal+rocketmq实现数据库同步-canal简单使用
10.【canal】canal从入门到放弃-mysql+canal+rocketmq实现数据库同步-canal简单使用
推荐文章
更多
推荐镜像
更多