您的位置:首页 > 数据库 > MySQL

实现两个Mysql数据库之间的主从同步

2013-11-19 10:22 411 查看
一、概述

 MySQL从3.23.15版本以后提供数据库复制(replication)功能,利用该功能可以实现两个数据库同步、主从模式、互相备份模式的功能。本文档主要阐述了如何在linux系统中利用mysql的replication进行双机热备的配置。

二、环境

操作系统:Linux2.6.23.1-42.fc8#SMP(不安装XEN)

Mysql版本:5.0.45-4.fc8

设备环境:PC(或者虚拟机)两台

三、配置

数据库同步复制功能的设置都在MySQL的配置文件中体现,MySQL的配置文件(一般是my.cnf):在本环境下为/etc/my.cnf。

3.1设置环境:

IP的设置:

A主机IP:10.10.0.119

Mask:255.255.0.0

B主机IP:10.10.8.112

Mask:255.255.0.0

在IP设置完成以后,需要确定两主机的防火墙确实已经关闭。可以使用命令serviceiptablesstatus查看防火墙状态。如果防火墙状态为仍在运行。使用serviceiptablesstop来停用防火墙。如果想启动关闭防火墙,可以使用setup命令来禁用或定制。

最终以两台主机可以相互ping通为佳。

3.2配置A主(master)B从(slave)模式

3.2.1配置A为master

 1、增加一个用户同步使用的帐号:

GRANTFILEON*.*TO‘backup’@'10.10.8.112'IDENTIFIEDBY‘1234’;

GRANTREPLICATIONSLAVEON*.*TO‘backup’@'10.10.8.112'IDENTIFIEDBY‘1234’;

赋予10.10.8.112也就是Slave机器有File权限,只赋予Slave机器有File权限还不行,还要给它REPLICATIONSLAVE的权限才可以。

2、增加一个数据库作为同步数据库:

createdatabasetest;

3、创建一个表结构:

createtablemytest(usernamevarchar(20),passwordvarchar(20));

4、修改配置文件:

修改A的/etc/my.cnf文件,在my.cnf配置项中加入下面配置:

下面的这些参数要放到mysqld中!

server-id=1#Server标识

log-bin

binlog-do-db=test#指定需要日志的数据库


5、重起数据库服务:

servicemysqldrestart

查看server-id:

showvariablelike‘server_id’;

实例:

mysql>showvariableslike'server_id';

+---------------+-------+

|Variable_name|Value|

+---------------+-------+

|server_id|1|

+---------------+-------+

1rowinset(0.00sec)


6、用showmasterstatus/G命令看日志情况。

正常为:

mysql>showmasterstatus/G

***************************1.row***************************

File:mysqld-bin.000002

Position:198

Binlog_Do_DB:test,test

Binlog_Ignore_DB:

1rowinset(0.08sec)

3.2.2配置B为slave

1、增加一个数据库作为同步数据库:

createdatabasetest;

2、创建一个表结构:

createtablemytest(usernamevarchar(20),passwordvarchar(20));

3、修改配置文件:

修改B的/etc/my.cnf文件,在my.cnf配置项中加入下面配置:

server-id=2

master-host=10.10.0.119

master-user=backup#同步用户帐号

master-password=1234

master-port=3306

master-connect-retry=60#预设重试间隔60秒

replicate-do-db=test#告诉slave只做backup数据库的更新


5、重起数据库服务:

servicemysqldrestart

查看server-id:

showvariableslike‘server_id’;

实例:

mysql>showvariableslike'server_id';

+---------------+-------+

|Variable_name|Value|

+---------------+-------+

|server_id|2|

+---------------+-------+

1rowinset(0.00sec)


6、用showslavestatus/G命令看日志情况。

正常为:

mysql>showslavestatus/G

***************************1.row***************************

Slave_IO_State:Waitingformastertosendevent

Master_Host:10.10.0.119

Master_User:backup

Master_Port:3306

Connect_Retry:60

Master_Log_File:mysqld-bin.000001

Read_Master_Log_Pos:98

Relay_Log_File:mysqld-relay-bin.000003

Relay_Log_Pos:236

Relay_Master_Log_File:mysqld-bin.000001

Slave_IO_Running:Yes

Slave_SQL_Running:Yes

Replicate_Do_DB:test,test

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno:0

Last_Error:

Skip_Counter:0

Exec_Master_Log_Pos:98

Relay_Log_Space:236

Until_Condition:None

Until_Log_File:

Until_Log_Pos:0

Master_SSL_Allowed:No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master:0

1rowinset(0.01sec)



3.2.3验证配置

分别使用insert,delete,update在A主机进行增删改查数据库;查看B主机的数据库是否与A主机一致;若一致,则配置成功。

3.3双机互备模式

如果在A主机加入slave设置,在B主机加入master设置,则可以做B->A的同步。

1、在A主机的配置文件中mysqld配置项加入以下设置:

master-host=10.10.8.112

master-user=backup

master-password=1234

replicate-do-db=test

master-connect-retry=10


2、在B的配置文件中mysqld配置项加入以下设置:

log-bin

binlog-do-db=test


  注意:当有错误产生时,*.err日志文件同步的线程退出,当纠正错误后,要让同步机制进行工作,运行slavestart。


重起A、B机器,则可以实现双向的热备份。

四、常见问题及解决

1、Slave机器的权限问题,不但要给slave机器File权限,还要给它REPLICATIONSLAVE的权限。

2、在修改完Slave机器/etc/my.cnf之后,slave机器的mysql服务启动之前,记得要删除掉master.info

3、在showmasterstatus或着showslavestatus不正常时,看看.err是怎样说的。

4、Slave上Mysql的Replication工作有两个线程,I/Othread和SQLthread。I/O的作用是从master3306端口上把它的binlog取过来(master在被修改了任何内容之后,就会把修改了什么写到自己的binlog等待slave更新),然后写到本地的relay-log,而SQLthread则是去读本地的relay-log,再把它转换成本Mysql所能理解的语句,于是同步就这样一步一步的完成.决定I/Othread的是/var/lib/mysql/master.info,而决定SQLthread的是/var/lib/mysql/relay-log.info.

5、启动slave,命令用startslave;重新启动用restartslave
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: