天天看点

MySQL Replication 即主从复制

MySQL Replication主要用于MySQL的时时备份或者读写分离。在配置之前先做一下准备工作,配置两台mysql服务器,或者在一台服务器上配置两个端口也可以。

流程示意图:

A-->change data-->bin_log-->transfer-->B-->repl_log-->change data

一、搭建好了一个mysql,跑的是3306端口。

1、下载mysql到/usr/local/src/

2、解压缩

3.把解压完的数据移动到/usr/local/mysql

4.建立mysql用户

5.初始化数据库

6.拷贝配置文件

<code>cp support-files/my-large.cnf   /etc/my.cnf</code>拷贝配置文件

7.拷贝启动脚本文件并修改其属性

8.修改启动脚本

需要修改的地方有 “<code>datadir=/data/mysql”</code>

                               <code>basedir=/usr/local/mysql</code>

9.把启动脚本加入系统服务项,并设定开机启动,启动mysql

检查mysqld是否启动的命令为:<code>ps aux |grep mysqld</code>

二、下面再搭建一个3307端口的mysql:

保存后就可以启动它了:

若开机启动,需要把启动命令加入到/etc/rc.local中

如果想跟mysqld一样脚本启动,则:

也可以配置到/etc/init.d/mysqlslave

同样修改

后面的conf路径

但是不能使用/etc/init.d/mysqlslave start启动

可以使用service mysqlslave start

也可以将写入到/etc/rc.d/rc.local文件中:

三、在主服务器上创建测试数据库:

登录两台mysql

登录mysql:/usr/local/mysql/bin/mysql -uroot -p199610

        或mysql -S  /tmp/mysql.sock  

登录mysql_slave:mysql -S  /tmp/mysql_slave.sock  或者mysql -h127.0.0.1 -P3307 (无密)

把3306端口的mysql作为主(master),而把3307的mysql作为从(slave)

为了让实验更加像生产环境,先在master上创建一个库db1

[root@localhost bin]# mysql -uroot -S /tmp/mysql.sock -p199610

mysql&gt; create database db1;

Query OK, 1 row affected (0.01 sec)

mysql&gt; quit

Bye

// -S 后面指定mysql的socket文件路径,这也是登陆mysql的一种方法,因为在一台服务器上跑了两个mysql端口,所以,只能用 -S 这样的方法来区分。

创建了db1库,然后把mysql库的数据复制给它:

设置主master

修改配置文件:

在[mysqld]部分查看是否有以下内容,如果没有则添加:

log-bin=mysql-bin //可以修改为aiker等等

除了这两行是必须的外,还有两个参数,你可以选择性的使用其中一个:

#指定库的主从

#忽略指定库主从,黑名单

<code>binlog-do-db=</code> #需要复制的数据库名,多个数据库名,使用逗号分隔。

binlog-ignore-db= #不需要复制的数据库库名,多个数据库名,使用逗号分隔。这两个参数其实用一个就可以

重启mysql服务:

查看/data/mysql下,会出现以log-bin值文件:

设置mysql数据库的root访问密码:

设置密码:<code>mysqladmin -uroot -S /tmp/mysql.sock password '199610'</code>

登录:<code>mysql -uroot -S /tmp/mysql.sock -p'199610'</code>

//这里的repl是为slave端设置的访问master端mysql数据的用户,密码为123456,这里的127.0.0.1为slave的ip(因为我们配置的master和slave都在本机)。

设置slave

先修改slave的配置文件my.cnf:

找到 “server-id = 1” 这一行,删除掉或者改为 “server-id = 2” 总之不能让这个id和master一样,否则会报错。

另外在从上,如下两行,黑白名单,看主mysql有没有配置

改完后,重启slave:

拷贝master上的db1库的数据到slave上,因为master和slave都在一台服务器上,所以操作起来简单了很多,如果是不同的机器,可能就需要远程拷贝了,希望你注意这一点:

二行中,-e选项,它用来把mysql的命令写到shell中,这样可以方便把mysql操作写进脚本中,它的格式就是 -e "commond" 它很实用。

把数据拷贝过来后,就需要在slave上配置主从了:

在主mysql上解锁

或者

3、测试主从

在master上执行如下命令:

slave上的该表也被清空了。这样好像不太明显,不妨继续把db表删除试试:

主从配置起来很简单,但是这种机制也是非常脆弱的,一旦我们不小心在从上写了数据,那么主从也就被破坏了。另外如果重启master,务必要先把slave停掉,也就是说需要在slave上去执行 slave stop 命令,然后再去重启master的mysql服务,否则很有可能就会中断了。当然重启完后,还需要把slave给开启 slavestart.

本文转自 喵来个鱼 51CTO博客,原文链接:http://blog.51cto.com/m51cto/2070286,如需转载请自行联系原作者