• 每天进步一点点!

文章分类

推荐网站

常用手册

MySql主从复制配置实例【原创】

<<返回

2013-12-18 08:22:03

主从复制的优点:

  1. 主服务器/从服务器设置增加了健壮性。主服务器出现问题时,你可以切换到从服务器作为备份。
  2. 通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。SELECT查询可以发送到从服务器以降低主服务器的查询处理负荷。但修改数据的语句仍然应发送到主服务器,以便主服务器和从服务器保持同步。如果非更新查询为主,该负载均衡策略很有效,但一般是更新查询。
  3. 使用复制的另一个好处是可以使用一个从服务器执行备份,而不会干扰主服务器。在备份过程中主服务器可以继续。

 

主从复制的工作原理:

主从复制的通过3个过程来实现,其中一个过程发生在主服务器上,另两个过程发生在从服务器。

  1. 主服务器将用户对数据库的更新操作以二进制的格式保存在Binary Log日志文件中,然后由Binlog Dump线程将Binary Log日志文件传输到从服务器。
  2. 从服务器通过一个I/O线程将主服务器上的Binary Log日志文件中的更新操作复制到一个叫做Relay Log的中继日志文件中。
  3. 从服务器通过另一个SQL线程将Relay Log中继日志文件中的操作依次在本地执行,从而实现主从服务器之间的数据同步。

 

主从复制的详细过程如图:

 

 

  1. Binlog Dump线程

Binlog Dump线程运行在主服务器上,主要工作是把Binary Log日志文件的数据发送给从服务器。

使用show processlist语句可以查看该线程是否在运行。

 

  1. I/O线程

从服务器执行start slave语句后,创建一个I/O线程。此线程运行在从服务器上,与主服务器建立连接,然后向主服务器发出更新请求,I/O线程将主服务器发送的更新操作复制到本地Relay Log中继日志文件中。

使用show slave status语句可以查看I/O线程的状态。

 

  1. SQL线程

SQL线程运行在从服务器上,主要工作是读取Relay Log中继日志文件中的更新操作,并将这些操作以此执行,从而使主从数据得到同步。

 

主从复制的配置:

  • 确认主从服务器MySQL版本

MySQL不同版本的BinLog格式可能不一样,最好采用相同的版本。至少要保证主服务器的版本不高于从服务器。 

  • 在主服务器上为从服务器设置一个链接账户,授予replication salve权限
mysql> grant replication slave on *.* to 'slave1'@'192.168.2.11' identified by '123456'; 

 

配置主服务器:

打开主服务器上MySQL的配置文件(my.cnf),加入下面两行:

log-bin=mysql-bin
server-id= 1

注:我的MySQL服务器版本是5.5.16-log,上面两行本来就有。

重启主服务器的MySQL,进入mysql终端

运行下面的命令,会输出如图的结果:

show master status;


 

File表示主服务器上正在使用的二进制文件;

Position的值表示下一个被记录事件的位置。

Binlog_Do_DB和Binlog_Ignore是主服务器控制写日binlog文件内容的过滤选项。默认为空,表示不过滤。

File和Position两个字段指明从服务器将从主服务器的哪个binlog文件复制,以及复制的开始位置。

 

配置从服务器

环境:

CentOS 5.6 + MySQL 5.5.16-log

主服务器IP:192.168.2.10

从服务器一IP:192.168.2.11;

从服务器二IP:192.168.2.12;

 

打开从服务器上MySQL的配置文件(my.cnf),加入下面两行:

log-bin=mysql-bin
server-id= 2

重启从服务器的mysql。进入mysql终端

输入下面的命令:

change master to master_host="192.168.2.10", master_user="slave1", master_port=3306, master_password="123456", master_log_file="mysql-bin.000002", master_log_pos=107 ;

 

连接主从服务器

在从服务器上,进入mysql终端,输入下面命令,开始复制。

mysql> start slave;

用下面的命令查看salve的状态:

mysql> show slave status\G;

 


 

如果看到上面图上的两个都为Yes,说明从服务上的I/O线程和SQL线程都已经开始运行了。这时如果在服务器上进行修改,可以在从服务器上看到各种日志位置的变化,以及数据库中数据的变化。

 

测试

在主服务器上执行下面的几条命令

mysql> use test; 
mysql> create table test(id int not null);
mysql> insert into test values(1),(2),(3);

在从服务器上,可以用下面的语句查看从服务器数据的变化

mysql> select * from test.test;

如果不出意外的话,从库的test数据库中已经多了一个test表,并且插入了三条数据。

 

 

如果我们的主从运行了一段时间后,我们想再加一台从服务器。可以在主服务器上赋予这台从服务器权限。

mysql> grant replication slave on *.* to 'slave2'@'192.168.2.12' identified by '654321'; 

 

在从服务器二上,修改mysql的配置文件(my.cnf):

log-bin=mysql-bin
server-id= 3

重启从服务器二。进入mysql终端,输入下面命令:

change master to master_host="192.168.2.10", master_user="slave2", master_port=3306, master_password="654321", master_log_file="mysql-bin.000002", master_log_pos=0 ;

此处master_log_pos=0表示从开始从日志的开始位置开始读。

启动服务器二mysql的slave,在mysql终端输入:

mysql> start slave;

查看slave的状态

mysql> show slave status\G;

 

如果出现的是Salve_I/O_Running : Yes 和 Salve_SQL_Running : Yes ,这说明服务器二配置成功了,

这是在从服务器二上,查看test数据库。

mysql> select * from test.test;

发现test数据库里的test表也同步过来了。

 

 

文章评论

  • 暂无评论

发表评论

昵称:

内容:

发表评论