1、理论部分
1.1、mysql replication的概念:
enables data from one mysql database server(the master) to be replicated to one or more mysql database servers(the slaves).
1)可以将数据从一台数据库服务器(master)复制到一到多台数据库服务器(slave)
2)默认情况下,属于异步复制。因此无需维持长连接。
3)通过配置,你可以复制所有的库或者某几个库,甚至库中的几个表。
<a href="http://s3.51cto.com/wyfs02/M00/73/89/wKioL1YA4G6zIfwrAAENUmMX6Bs957.jpg" target="_blank"></a>
1.2、mysql replication的实现基础:
Binary Log(二进制日志)是实现mysql主从复制的基础
Binary Log的概念:所有的、无论是明确的或隐含的可以引起数据库发生改变的语句都要记录于Binary Log。
主从备份涉及的日志文件有:
Binary log(二进制日志)
Relay log(中继日志)
简单的说,就是master将数据库的改变写进二进制日志,slave同步这些二进制日志,并根据这些二进制日志进行数据库操作。
<a href="http://s3.51cto.com/wyfs02/M01/73/89/wKioL1YA4Jey1H3ZAABXQUhjG1Y416.jpg" target="_blank"></a>
1.3、mysql Replication的用途
1)Fail Over(故障切换)
2)Backup Server(备份服务,不能应对错误的命令操作)
3)High Perfomance(高性能)
1.4、mysql replication的分类:
1)主从(M-S)
2)主主(M-M)
1.5、mysql replication的商业价值:
首先服务器的扩展方式有:
1)scale up:提高原有应用的服务器性能
2)scale out:原有服务器以及应用不变,增加服务器。
服务器遇到性能瓶颈,向上扩展(scale up)的成本过高,假设服务器现有价格是M,性能扩展N倍,成本往往是M*N倍还要多的多的代价才能提高N倍的性能。
<a href="http://s3.51cto.com/wyfs02/M02/73/89/wKioL1YA4MfTWL5_AAJmAtONtSI303.jpg" target="_blank"></a>
1.6、mysql的集群类型
cluster分类:
1)Load Balancing(负载均衡集群),两台服务器均同时提供服务。
2)High Availability(高可用集群),属于冗余机制,只单台提供服务。
3)High Preformance(高性能集群),例子如超级计算机,将非常大的运算需求,自动分割成N片,每一片交给一台计算机处理,处理完成后再返回结果给切割的计算机重新整合。
mysql既有负载均衡能力,又有高可用的特征,从某种意义来讲,负载均衡本身就具有高可用的特征,但高可用并不能提供负载均衡的能力。
1.7、mysql的同步异步问题
同步异步概念:
Async(异步)-通讯无确认信号返回,发送方无需等待接收方回应任务即中止,异步可以提供更好的性能表现。
Sync(同步)-通讯有确认信号返回,发送方需等待接收方回应任务才中止。
mysql主从架构属于异步架构
1.8、实现主从复制的相关线程
mysql主从的线程:
1)Dump thread,负责把数据倾泻给从服务器的线程。
2)I/o thread,负责接收主服务器倾泻过来的线程。
3)sql thread,从中继日志中读取数据并在本地应用数据的线程。
<a href="http://s3.51cto.com/wyfs02/M00/73/89/wKioL1YA4PyDS6hkAAFaxPaiI_8602.jpg" target="_blank"></a>
2、实验部分
2.1、实验环境
2.1.1、基本信息
1)mysql主服务器(Master):
ipaddress=10.168.0.103
hostname=sql-m
2)mysql从服务器(Slave):
ipaddress=10.168.0.104
hostname=sql-s
2.1.2、mysql的安装与初始化
In Master&Slave:
以上主机均需要先安装mysql相关rpm包:
1
2
3
4
<code>yum -y </code><code>install</code> <code>mysql-server mysql-devel mysql</code>
<code>chkconfig mysqld on</code>
<code>/etc/init</code><code>.d</code><code>/mysqld</code> <code>start</code>
<code>mysql_secure_installation</code>
初始化步骤如下(请根据实际情况选):
<a href="http://s3.51cto.com/wyfs02/M00/73/8B/wKiom1YA3wHSw-NKAAIFED6_9nc456.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M01/73/89/wKioL1YA4WKzbcSfAAJaTMPrYr8142.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M01/73/8B/wKiom1YA3yTwEufbAAEobaPoK-s347.jpg" target="_blank"></a>
初始化完成后,做登录测试:
<code>mysql -uroot -p</code>
<a href="http://s3.51cto.com/wyfs02/M00/73/8B/wKiom1YA31fzWxfqAAG54Hx7jtw762.jpg" target="_blank"></a>
2.1.2、防火墙配置
vim编辑/etc/sysconfig/iptables文件:
<code>-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT</code>
编辑完成效果:
<a href="http://s3.51cto.com/wyfs02/M02/73/8B/wKiom1YA3_ngFHX6AAGQpl6bevU671.jpg" target="_blank"></a>
重启防火墙:
<code>/etc/init</code><code>.d</code><code>/iptables</code> <code>restart</code>
<a href="http://s3.51cto.com/wyfs02/M00/73/89/wKioL1YA4mLhWdvnAAC7qWNI_yQ645.jpg" target="_blank"></a>
2.1.3、percona xtrabackup的安装
<code>yum </code><code>install</code> <code>http:</code><code>//www</code><code>.percona.com</code><code>/downloads/percona-release/redhat/0</code><code>.1-3</code><code>/percona-release-0</code><code>.1-3.noarch.rpm</code>
<code>yum </code><code>install</code> <code>percona-xtrabackup</code>
以上如果安装后执行innobackupex指令提示不支持mysql版本错误,请改为20版本:
<code>yum -y remove percona-xtrabackup</code>
<code>yum -y </code><code>install</code> <code>percona-xtrabackup-20</code>
2.2、实验步骤
2.2.1、step1
Slave是通过mysql连接登录到Master上读取二进制日志的。因此需要在Master上给Slave配置权限。
In Master:
数据库设置:
<code>mysql></code><code>grant</code> <code>replication slave </code><code>on</code> <code>*.* </code><code>to</code> <code>'repl'</code><code>@</code><code>'10.168.0.104'</code> <code>identified </code><code>by</code> <code>'repl'</code><code>;</code>
<code>mysql>flush </code><code>privileges</code><code>;</code>
<a href="http://s3.51cto.com/wyfs02/M01/73/8B/wKiom1YA37yyU5uiAABgmqtvCz4707.jpg" target="_blank"></a>
In Slave:
做如下测试:
<code>mysql>mysql -h10.168.0.103 -urepl -prepl</code>
<a href="http://s3.51cto.com/wyfs02/M00/73/8B/wKiom1YA4FyzIsabAAF6cUiX44Y196.jpg" target="_blank"></a>
2.2.2、step2
In Master:
1)打开二进制日志,并标识server-id
2)server-id用于唯一标识主机,数字取值范围1至2的32处方减1
vim编辑/etc/my.cnf:
5
<code>[mysqld]</code>
<code>log-bin </code><code>#开启二进制日志</code>
<code>binlog-</code><code>format</code><code>=row </code><code>#指定二进制日志以row格式记录(增加实物支持性、增加同步性能)</code>
<code>sync</code><code>-binlog=1 </code><code>#官方推荐打开的参数</code>
<code>server-</code><code>id</code><code>=1 </code><code>#设定server id</code>
<a href="http://s3.51cto.com/wyfs02/M02/73/89/wKioL1YA4suDDp0cAAEw2ScJkv4450.jpg" target="_blank"></a>
重新启动mysqld服务:
<code>/etc/init</code><code>.d</code><code>/mysqld</code> <code>restart</code>
<a href="http://s3.51cto.com/wyfs02/M02/73/8B/wKiom1YA4LmzUpBEAABbvII6St8357.jpg" target="_blank"></a>
检查设置是否成功:
<code>ls</code> <code>/var/lib/mysql/</code>
<a href="http://s3.51cto.com/wyfs02/M00/73/89/wKioL1YA4y2wg6lrAAB26irlj54265.jpg" target="_blank"></a>
2.2.3、step3
制作一个Master的完整备份,并执行prepare.
<code>mkdir</code> <code>/var/lib/backup</code>
<code>innobackupex --user=root --password=xxx </code><code>/var/lib/backup/</code>
<a href="http://s3.51cto.com/wyfs02/M00/73/89/wKioL1YA417wGtAyAAMHufte5jg312.jpg" target="_blank"></a>
<code>innobackupex --use-memory=500m --apply-log </code><code>/var/lib/backup/2015-09-21_07-18-34</code>
<a href="http://s3.51cto.com/wyfs02/M02/73/8B/wKiom1YA4UvSs-Z4AAMjeF55C3A007.jpg" target="_blank"></a>
以上工具可以记录二进制编号,从服务器导入数据后再后执行同步会从该编号后面开始执行。
2.2.4、step4
把备份拷贝到slave,并放入数据库文件目录。
In Slave
<code>scp</code> <code>-r </code><code>/var/lib/backup/2015-09-21_07-18-34</code> <code>10.168.0.104:</code><code>/var/lib/backup/</code>
<a href="http://s3.51cto.com/wyfs02/M01/73/8B/wKiom1YA4ZiyMZ0-AAIieH4aZ_M263.jpg" target="_blank"></a>
6
<code>/etc/init</code><code>.d</code><code>/mysqld</code> <code>stop</code>
<code>cd</code> <code>/var/lib/backup/2015-09-21_07-18-34</code>
<code>cp</code> <code>-R * </code><code>/var/lib/mysql</code>
<code>chown</code> <code>-R mysql:mysql </code><code>/var/lib/mysql</code>
登录后做数据库检查:
<code>mysql>show databases;</code>
<code>mysql></code><code>exit</code>
2.2.5、step5
In Slave:
在Slave上配置server-id,标识服务器。
vim编辑/etc/my.cnf
<code>server-</code><code>id</code><code>=2</code>
配置效果:
<a href="http://s3.51cto.com/wyfs02/M02/73/89/wKioL1YA5DeQMI5aAAD90D2ZoCk317.jpg" target="_blank"></a>
配置完成后重启服务:
<a href="http://s3.51cto.com/wyfs02/M02/73/93/wKioL1YBZCqQfaJhAAB3BOIj0Rs369.jpg" target="_blank"></a>
2.2.6、step6
查看并记录二进制日志中的position ID。
<code>cd</code> <code>/var/lib/mysql</code>
<code>cat</code> <code>xtrabackup_binlog_info</code>
<a href="http://s3.51cto.com/wyfs02/M02/73/8B/wKiom1YA4lTg88uiAABFPcWYHKU926.jpg" target="_blank"></a>
记录下以上标红部分,step7要用。
2.2.7、step7
配置Slave Replication。
<code>mysql>change master </code><code>to</code>
<code> </code><code>->master_host=</code><code>'10.168.0.103'</code><code>,</code>
<code> </code><code>->master_user=</code><code>'repl'</code><code>,</code>
<code> </code><code>->master_password=</code><code>'repl'</code><code>,</code>
<code> </code><code>->master_log_file=</code><code>'mysqld-bin.000004'</code><code>,</code>
<code> </code><code>->master_log_pos=106;</code>
2.2.8、step8
启动Replication,并检查结果。
<code>mysql>start slave;</code>
<code>mysql>show slave status\G;</code>
<a href="http://s3.51cto.com/wyfs02/M00/73/8B/wKiom1YA4prwVSbTAALnfDo5lf4564.jpg" target="_blank"></a>
红标部分都要为Yes
<a href="http://s3.51cto.com/wyfs02/M00/73/8B/wKiom1YA4rzB9rfjAAIYJBxjV88741.jpg" target="_blank"></a>
In Master
<a href="http://s3.51cto.com/wyfs02/M01/73/89/wKioL1YA5RmiAfN7AAIUPVm5FiU631.jpg" target="_blank"></a>
<code>show databases;</code>
<code>create</code> <code>database</code> <code>cmdschool;</code>
对比效果如下(左Master,右Slave):
<a href="http://s3.51cto.com/wyfs02/M01/73/8B/wKiom1YA41LAUJQMAAHUP34rS3A059.jpg" target="_blank"></a>
MSS模式请参阅博文:
<a href="http://tanzhenchao.blog.51cto.com/2420395/1697067" target="_blank">http://cmdschool.blog.51cto.com/2420395/1697067</a>
开启GTIDs技术请参阅:
<a href="http://cmdschool.blog.51cto.com/2420395/1697570" target="_blank">http://cmdschool.blog.51cto.com/2420395/1697570</a>
MM模式请参阅博文:
<a href="http://cmdschool.blog.51cto.com/2420395/1699623" target="_blank">http://cmdschool.blog.51cto.com/2420395/1699623</a>
本文转自 tanzhenchao 51CTO博客,原文链接:http://blog.51cto.com/cmdschool/1696474,如需转载请自行联系原作者