天天看点

总结之:CentOS 6.5 MariaDB或MySQL主从复制详解

MySQL Replocation:NySQL复制,MySQL的复制默认为异步工作模式

   mysql的复制功能是mysql内置的,装上它之后就具备了这个功能,而mysql复制是mysql实现大规模高性能应用的一个基本工具,是mysql完成水平扩展的基本架构,为了能够应付更多的访问请求,通常情况下我们需要对服务器进行扩展,而扩展通常有两种方式:向上扩展和向外扩展;

向上扩展:scale on,也称为垂直扩展,一般是扩充服务器的内存或CPU颗数的这种就是向上扩展。

向外扩展:scale out,也称为水平扩展,比较一台服务器不够,再加一台服务器,再不够再加,这种情况就是向外扩展。

其实MySQL的的复制功能就是使用MySQL向外扩展的能力,也就是水平扩展的功能。

   所谓同步的复制:首先主服务器每更新一条数据先写到磁盘文件中,同时还要写一个到二进制日志文件中,从服务器就会到主服务器请求二进制信息保存在中继日志中,保存好后由本地的SQL thread从中继日志应用到从服务器的本地有磁盘文件中,当这个过程完成之后再由从服务器返回确认结果给主服务器,主服务器才返回结果给客户端的。

所谓异步复制:当主服务器要写数据时,先写到本地的磁盘,同时写到二进制文件日志中,写好二进制日志文件后就把结果返回给客户端,至于从服务有没有来主服务器同步二进制日志他不关心。

注意:在做复制时双方的的MySQL要一致,如果不一致,主的要低于从的。

   MySQL主从服务的工作原理图:

<a href="http://s3.51cto.com/wyfs02/M02/23/FC/wKioL1NJSEbx9Dz0AAOohJbAW-w420.jpg" target="_blank"></a>

   这里还要注意,如果从服务器不断的到主服务器来请求数据,发现这些数据已经是最新的数据了,那从服务器的I/O thread将会转为睡眠状态,因为主服务器会通知,而I/O线程不会做轮循,从服务器的二进制日志文件通常是被关闭状态的,从服务器是不允许执行写操作的。

下面来完成主从复制的基本操作步骤:

   1、这里我们要有两台主机、我这里使用克隆主服务器的主机当做从服务器、首先要把虚拟主机关机才可以克隆的:

<a href="http://s3.51cto.com/wyfs02/M01/23/FC/wKiom1NJSNfwhN9ZAAJ_Vy_-uh0925.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M00/23/FC/wKioL1NJSM3BkkBdAAEhlLpuEVw165.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M02/23/FC/wKiom1NJSRGB-e8nAAD6IOmtor0934.jpg" target="_blank"></a>

   克隆完之后我们就开机登录、确保主从服务器都正常运行了即可:

<a href="http://s3.51cto.com/wyfs02/M01/23/FC/wKioL1NJSUrRFE7fAAF5yBfM-pU195.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M00/23/FC/wKiom1NJSY3jwbtaAAFK_P1knII792.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M02/23/FC/wKioL1NJSZriZVDuAADbv5yisnU563.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M00/23/FC/wKioL1NJSbTinPbEAADegnAVVC0676.jpg" target="_blank"></a>

   2、做主从复制最重要的一点就是双方的server-id不能相同;然而在主服务器上只需要三步:

   1)就是改server-id

   2)启用二进制日志

   3)创建有复制权限的帐号

   # vim /etc/my.cnf

<a href="http://s3.51cto.com/wyfs02/M01/23/FC/wKioL1NJSenhMWMOAAEgWhtbavw995.jpg" target="_blank"></a>

   改好之后保存退出即可,再重启服务器,创建二进制目录:

   # mkdir /data/binlogs

   # chown -R mysql.mysql /data/binlogs

   重启主服务器的mysql服务;

   # service mysqld restart

   而后连接到主服务器上授权一个有复制权限的帐号:

   # mysql -uroot -hlocalhost -p    

1

2

<code>MariaDB [hellodb]&gt; GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO </code><code>'repluser'</code><code>@</code><code>'172.16.251.156'</code> <code>IDENTIFIED BY </code><code>'replpass'</code><code>;</code>

<code>MariaDB [hellodb]&gt; FLUSH PRIVILEGES;</code>

   3、在从服务器上有以下几步:

   1)改server-id

   2)启用中继日志

   3)连接主服务器

   4)启动复制线程

   配置从服务器的相关配置信息:

<a href="http://s3.51cto.com/wyfs02/M02/23/FC/wKioL1NJSkbBRXGvAAE5NomCrFo978.jpg" target="_blank"></a>

   # mkdir /data/relaylogs/

   # chown -R mysql.mysql /data/relaylogs

   重启mysql服务:

   再连到从服务器的mysql服务器上:

   # mysql -uroot -hlocalhost -p

   查看一下从服务器的中继日志是否在启动状态:

   MariaDB [(none)]&gt; SHOW GLOBAL VARIABLES LIKE '%relay%';

<a href="http://s3.51cto.com/wyfs02/M00/23/FC/wKioL1NJSw2w5rPgAAGcFF1JJ_k231.jpg" target="_blank"></a>

   按照上面的步骤再连接主服务器:    

3

4

5

6

<code># MASTER_HOST='172.16.251.244' --主服务器的IP地址</code>

<code># MASTER_USER='repluser' --主服务器上授权复制的用户名</code>

<code># MASTER_PASSWORD='replpass' --主服务器上授权用名的密码</code>

<code># MASTER_LOG_FILE='mysql-bin.000006' --主服务器上的日志文件</code>

<code># MASTER_LOG_POS=245 --主服务器上日志文件的位置</code>

<code>MariaDB [hellodb]&gt; CHANGE MASTER TO MASTER_HOST=</code><code>'172.16.251.244'</code><code>,MASTER_USER=</code><code>'repluser'</code><code>,MASTER_PASSWORD=</code><code>'replpass'</code><code>,MASTER_LOG_FILE=</code><code>'mysql-bin.000006'</code><code>,MASTER_LOG_POS=245;</code>

   但是此时的从服务器还没有工作起来,要使从服务器工作起来还要手动启动复制线程,我们上面的步骤写得很明白:

   MariaDB [(none)]&gt; START SLAVE;

   OK、到这里主服务器算是配置完成了,仓促整理了一下,有什么不对的地方还望多多提点,在此先谢谢你的关注了!    

本文转自 wei0164 51CTO博客,原文链接:http://blog.51cto.com/tanxw/1394762,如需转载请自行联系原作者

继续阅读