Welcome 微信登录

首页 / 数据库 / MySQL / Linux下MySQL主从复制(Master-Slave)与读写分离(Amoeba)实践

一、为什么要做Mysql的主从复制(读写分离)?
通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低。
为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻主数据库的负载。
而且如果主数据库宕机,可快速将业务系统切换到从数据库上,可避免数据丢失。二、MySQL主从复制 Mysql主从复制(读写分离)和集群的区别我对MySQL也是刚开始研究,不是很专业。我的理解是:
1、主从复制(读写分离):一般需要两台及以上数据库服务器即可(一台用于写入数据,一台用于同步主的数据并用于数据查询操作)。
局限性:
(1)配置好主从复制之后,同一张表,只能对一个服务器写操作。如果在从上执行了写操作,而之后主也操作了这张表,或导致主从不同步;据说可以配置成主主方式,但我还没有研究到。
(2)主数据库服务器宕机,需要手动将业务系统切换到从数据库服务器。无法做到高可用性(除非再通过部署keepalive做成高可用方案)。
2、集群是由N台数据库服务器组成,数据的写入和查询是随机到任意一台数据库服务器的,其他数据库服务器会自动同步数据库的操作。
任何一台数据库宕机,不会对整个集群造成大的影响。
局限性:我经过测试才知道目前mysql集群版本(MySQL Cluster)只能对NDB存储引擎的数据进行集群同步,如果是INNODB或其他的MySQL存储引擎是不行的。这个也导致了我放弃了在业务系统中应用这种方案。三、回归正题,接下来开始MySQL5.5.12的主从复制教程:
1、MySQL5.5开始主从复制有两种方式:基于日志(binlog);基于GTID(全局事务标示符)。
需要注意的是:GTID方式不支持临时表!所以如果你的业务系统要用到临时表的话就不要考虑这种方式了,至少目前最新版本MySQL5.5.12的GTID复制还是不支持临时表的。
所以此篇教程主要是告诉大家如何通过日志(binlog)方式做主从复制!2、MySQL官方提供的MySQL Replication教程:
http://dev.mysql.com/doc/refman/5.6/en/replication.html
这个官方教程强烈建议大家阅读(需要一定的英语阅读能力哦!不行就google翻译后再阅读吧~)。因此,一般来说都是通过 主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力 这样的方案来进行部署与实施的。如下图所示:MySQL5.6基于GTID的主从复制 http://www.linuxidc.com/Linux/2016-01/127900.htmUbuntu下Nginx做负载实现高性能WEB服务器5---MySQL主主同步 http://www.linuxidc.com/Linux/2012-06/61687p5.htm生产环境MySQL主主同步主键冲突处理 http://www.linuxidc.com/Linux/2013-07/86890.htmMySQL主从失败 错误Got fatal error 1236 http://www.linuxidc.com/Linux/2012-02/54729.htmMySQL主从复制,单台服务器上实施 http://www.linuxidc.com/Linux/2013-03/81913.htm搭建MySQL代理服务器实现读写分离+主从同步 http://www.linuxidc.com/Linux/2014-05/102265.htmMySQL 5.5 主从双向同步 http://www.linuxidc.com/Linux/2012-12/75973.htmMySQL 5.5主从同步排错 http://www.linuxidc.com/Linux/2014-08/105416.htmMySQL主从复制异步半同步实例 http://www.linuxidc.com/Linux/2014-10/107608.htm三、MySQL主从复制
场景描述:主数据库服务器:42.51.153.157,MySQL已经安装,并且无应用数据。
从数据库服务器:42.51.155.219,MySQL已经安装,并且无应用数据。系统:CentOS6.4 32位Mysql:5.5版本selinux关闭 防火墙关闭setenforce 0
service iptables stop2.就是要确定服务器上的Mysqlyum install mysql mysql-server -y3.确认时间同步[root@master ~]# yum install ntp -y
[root@master ~]# vi /etc/ntp.conf    #添加以下2行
server 127.127.1.0
fudge 127.127.1.0 stratum 8[root@master ~]# /etc/init.d/ntpd restart  #重启ntpd服务2)在节点服务器上进行时间同步[root@slave1 ~]# /etc/init.d/iptables stop
[root@slave1 ~]# chkconfig iptables off
[root@slave1 ~]# yum install -y ntpdate
[root@slave1 ~]# /usr/sbin/ntpdate 42.51.153.157四:配置Mysql1.首先修改Mysql主配置的配置文件(Master)[root@master ~]# cp /etc/my.cnf /etc/my.cnf.old        ##修改之前备份
[root@master ~]# vi /etc/my.cnf                        ##修改
server-id      = 11                                    //修改log-bin=master-bin                                        //修改        log-slave-updates=true                                  //增加[root@master ~]# /etc/init.d/mysqld restart          ##重启Mysql
[root@master ~]# mysql -u root –ppassword                  //登录数据库,给从服务器授权
mysql> grant replication slave on *.* to "yanghongfei"@"42.51.155.219" identified by "123456";
mysql> flush privileges;
mysql> show master status;                ##这个日志后面会用的到
+------------------+----------+--------------+------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000005 |      343 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)2.配置从服务器  (Slave)[root@master ~]# cp /etc/my.cnf /etc/my.cnf.old        ##修改之前备份[root@salve shell]# vi /etc/my.cnf
server-id      = 33                                                        //修改    此处ID只要比Master大就可以relay-log=relay-log-bin                                                    //增加relay-log-index=slave-relay-bin.index                          //增加修改完成之后重启mysql服务登录Mysql,配置同步[root@salve shell]# service mysqld restart[root@slave1 ~]# mysql -u root –ppasswordmysql> stop slave;                                          ##首先停止mysql>  change master to master_host="42.51.153.157",master_user="yanghongfei",master_password="123456",master_log_file="mysql-bin.000005",master_log_pos=343;mysql> start slave;mysql> show slave status G;查看是否成功~上面2处都为Yes的时候表示已经成功了~~3. 测试主从是否复制成功,主服务器创建数据库看是不是被同步过去了Master:Slave:下面我来装一个Discuz论坛 我们来测试下数据表会不会被同步进去,这里安装网站不再详细说了 我这面用的环境是lnmp  首先下载一个Discuz的包 网上有很多[root@master ~]# unzip Discuz_7.2_FULL_SC_UTF8.zip     [root@master ~]# mv upload/ /usr/share/nginx/html/[root@master ~]# cd /usr/share/nginx/html/[root@master html]# mv upload/ Discuz[root@master html]# chmod 777 -R ./Discuz/[root@master ~]# service nginx restartMaster:Slave:上面可以看出主从复制成功~~Mysql主从复制常用命令1.停止主节点复制mysql> stop master;2.清除主节点复制文件mysql> reset master;3.停止从节点复制mysql> stop slave;4.清除从节点复制文件mysql> reset slave;5.开启从节点复制mysql> start slave;6.查看主数据库的Master复制信息mysql> show master status;7.查看主节点的复制状态mysql> show master status G;8.查看从节点的复制状态mysql> show slave status G;更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2016-05/130905p2.htm
  • 1
  • 2
  • 下一页
SQL Server 2005附加数据库为只读的解决方法CentOS6 更改MySQL数据存放位置相关资讯      MySQL主从复制  MySQL读写分离 
  • CentOS搭建MySQL主从复制,读写分  (今 07:44)
  • MySQL主从复制原理应用基础  (08月27日)
  • MySQL主从复制 实践  (08月22日)
  • MySQL主从复制出现1205错误  (08月31日)
  • MySQL 主从复制原理  (08月22日)
  • 使用XtraBackup进行MySQL不锁表主  (08月09日)
本文评论 查看全部评论 (0)
表情: 姓名: 字数