我今天做了一下,初步测试是可以的。无论在A机器还是在B机器上增加数据,另一台机器都能即时地反应出来。
以下是我在另一个帖子上回复的,请参考:
刚开始时也是一直不成功,经过查看错误日志后,修正了一些错误。值得注意的有两点:
1、备份用户只赋file权限时,我发现该连接被拒绝。后来,我直接用了root用户就可以了,这点我还要再研究一下。
2、当我们在测试时,不停地修改my.ini文件(我这个版本是修改安装目录\my.ini),但要注意,修改完此文件,即使是重启mysql服务,也并未生效,应该这样做:停止mysql服务--修改my.ini文件--删除data 目录下的:机器名-bin.*及https://www.sodocs.net/doc/db18505433.html,文件,注意别把机器名-relay-bin.*删了--启动mysql服务。
我试了一下分别在两台机器上修改数据,基本上即时地在另外一台服务器上得到更新。
以下是我的my.ini文件。
机器A:
log-bin
server-id=1
sql-bin-update-same
binlog-do-db=test
master-host=10.143.52.11
master-user=root
master-password=yg0616
master-connect-retry=60
replicate-do-db=test
log-slave-updates
机器B
log-bin
server-id=2
sql-bin-update-same
binlog-do-db=test
master-host=10.143.52.21
master-user=root
master-password=yg0616
master-connect-retry=60
replicate-do-db=test
log-slave-updates
祝好运,解决了说一声啊。
source:
https://www.sodocs.net/doc/db18505433.html,/nuanchun666/archive/2008/01/28/2069301.aspx
一、概述MySQL从3.23.15版本以后提供数据库复制(replication)功能,利用该功能可以实现两个数据库同步、主从模式、互相备份模式的功能。本文档主要阐述了如何在linux系统中利用mysql的replication 进行双机热备的配置。
二、环境操作系统:Linux 2.6.23.1-42.fc8 # SMP(不安装XEN)Mysql版本:5.0.45-4.fc8设备环境:PC(或者虚拟机)两台
三、配置数据库同步复制功能的设置都在MySQL的配置文件中体现,MySQL的配置文件(一般是https://www.sodocs.net/doc/db18505433.html,f):在本环境下为/etc/https://www.sodocs.net/doc/db18505433.html,f 。
3.1 设置环境:IP 的设置:A主机IP:10.10.0.119 Mask:255.255.0.0B主机IP:
10.10.8.112 Mask:255.255.0.0在IP设置完成以后,需要确定两主机的防火墙确实已经关闭。可以使用命令service iptables status 查看防火墙状态。如果防火墙状态为仍在运行。使用service iptables stop 来停用防火墙。如果想启动关闭防火墙,可以使用setup命令来禁用或定制。最终以两台主机可以相互ping通为佳。
3.2 配置A主(master) B从(slave)模式3.2.1 配置A 为master
1、增加一个用户同步使用的帐号:GRANT FILE ON *.* TO ‘backup’@'10.10.8.112' I DENTIFIED BY ‘1234’;GRANT REPLICATION SLAVE ON *.* TO ‘backup’@'10.10.8.112' IDENTIFIED BY ‘1234’;赋予10.10.8.112也就是Slave 机器有File权限,只赋予Slave机器有File权限还不行,还要给它REPLICATION SLAVE的权限才可以。
2、增加一个数据库作为同步数据库:create database test;
3、创建一个表结构:create table mytest (username varchar(20),password varchar(20));
4、修改配置文件:修改A的/etc/https://www.sodocs.net/doc/db18505433.html,f 文件,在https://www.sodocs.net/doc/db18505433.html,f 配置项中加入下面配置:server-id = 1 #Server 标识log-binbinlog-do-db=test #指定需要日志的数据库
5、重起数据库服务:service mysqld restart查看server-id:show variable like ‘server_id’;实例:mysql> show variables like 'server_id'; --------------- ------- | Variable_name | Value | ---------------
------- | server_id | 1 | --------------- ------- 1 row in set (0.00 sec)6、用show master status\G 命令看日志情况。正常为:mysql> show master
status\G*************************** 1. row ***************************File: mysqld-bin.000002Position: 198Binlog_Do_DB: test,testBinlog_Ignore_DB: 1 row in set (0.08 sec)3.2.2 配置B 为slave1、增加一个数据库作为同步数据库:create database test;
2、创建一个表结构:create table mytest (username varchar(20),password varchar(20));
3、修改配置文件:修改B的/etc/https://www.sodocs.net/doc/db18505433.html,f 文件,在https://www.sodocs.net/doc/db18505433.html,f 配置项中加入下面配置:
server-id=2master-host=10.10. 0.119master-user=backup #同步用户帐号
master-password=1234master-port=3306master-connect-retry=60 #预设重试间隔60秒replicate-do-db=test #告诉slave只做backup数据库的更新
5、重起数据库服务:service mysqld restart查看server-id:show variables like ‘server_id’;实例:mysql> show variables like 'server_id'; --------------- ------- | Variable_name | Value |
--------------- ------- | server_id | 2 | --------------- ------- 1 row in set (0.00 sec)6、用show slave status\G 命令看日志情况。正常为:mysql> show slave
status\G*************************** 1. row
*************************** Slave_IO_State: Waiting for master to send
event 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: 01 row in set (0.01 sec)
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.112master-user=backupmaster-password=1234replicate-do-db=testmast er-connect-retry=102、在B的配置文件中mysqld 配置项加入以下设置:log-binbinlog-do-db=test
注意:当有错误产生时,*.err日志文件同步的线程退出,当纠正错误后,要让同步机制进行工作,运行slave start。重起A、B机器,则可以实现双向的热备份。
四、常见问题及解决
1、Slave机器的权限问题,不但要给slave机器File权限,还要给它REPLICATION SLAVE的权限。
2、在修改完Slave机器/etc/https://www.sodocs.net/doc/db18505433.html,f之后,slave机器的mysql服务启动之前,记得要删除掉https://www.sodocs.net/doc/db18505433.html,
3、在show master status 或着show slave status 不正常时,看看.err是怎样说的。
4、Slave上Mysql的Replication工作有两个线程, I/O thread和SQL thread 。I/O 的作用是从master 3306端口上把它的binlog取过来(master在被修改了任何内容之后,就会把修改了什么写到自己的binlog等待slave更新),然后写到本地的relay-log,而SQL thread则是去读本地的relay-log,再把它转换成本Mysql 所能理解的语句,于是同步就这样一步一步的完成.决定I/O thread的是/var/lib/mysql/https://www.sodocs.net/doc/db18505433.html,,而决定SQL thread的是/var/lib/mysql/https://www.sodocs.net/doc/db18505433.html,.
5、启动slave,命令用start slave;重新启动用restart slave
6、把master上的数据拷贝过来的方法之一实在slave上执行LOAD DATA FROM MASTER 语句。不过要注意,LOAD DATA FROM MASTER 是从MySQL 4.0.0之后才开始可以用的,而且只支持master上的MyISAM 类型表
我的配制A机:
server-id = 1
#zxw add
binlog-do-db=reader
##
master-host=172.16.168.216
master-user=backup
master-password=1234
replicate-do-db=reader
master-connect-retry=10
B机:
server-id = 2
#zxw add
master-host=172.16.168.215
master-user=backup
master-password=1234
master-port=3306
master-connect-retry=60
replicate-do-db=reader
#
binlog-do-db=reader
如果权限有问题,就给所有权限!!
参考:
https://www.sodocs.net/doc/db18505433.html,/2006_03_05_mysql_optimize_1
第一步:设置同步帐号
GRANT FILE,Select,SUPPER,REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO rep@192.168.1.15 IDENTIFIED BY '123456';
第二步:设置主机(master)的https://www.sodocs.net/doc/db18505433.html,f
master的唯一ID号:
server-id = 1
master的日志文件:
log-bin
master的不生成日志的数据库:
set-variable = binlog-ignore-db=mysql
set-variable = binlog-ignore-db=test
第三步:设置从机(slave)的https://www.sodocs.net/doc/db18505433.html,f
slave的唯一ID号:
setver-id = 2
slave的日志文件
log-bin
slave的不想生成日志的数据库:
set-variable = binlog-ignore-db = mysql
set-variable = binlog-ignore-db = test
连接主机(master)的地址:
master-host = 192.168.1.13
连接主机(master)的帐号:
master-user = rep
连接主机(master)的密码:
master-password = 123456
连接主机的(master)的端口:
master-port = 3306
设置想要同步的数据库:
set-variable=replicate-do-db=webdata
设置不想同步的数据库:
set-variable=replicate-ignore-db=mysql
set-variable=replicate-ignore-db=test
第四步:拷贝主机(master)的数据库到从机(slave)
1,首先把主机(master)的数据库的日志文件全部删除,重启数据库
2,用root帐号过入主机(master)的mysql,并把mysql的表都处于只读状态.
FLUSH TABLES WITH READ LOCK;
3,在不退出当前登陆口的情况下,另开一个登陆,把主机(master)数据库的文件
全部打包,并把文件拷贝到从机(slave)上面。
4,把从机(slave)的数据库停止,把从机原数据库文件先备份(防止出错),再把由主机拷贝过来的数据库文件解压并使主机(master)的数据库代替从机(slave)的数据库,设置好属主关系5,现在可以把主机的数据库的表解锁啦,执行UNLOCK TABLES;
6,重新启动从机(slave)的数据库,并进入mysql执行SHOW SLAVE STATUS\G,
如果你看到
Slave_IO_Running: Yes Slave_SQL_Running: Yes 那么,恭喜你,成功同步了。最后,提示,如果不成功,可以再做一次,检查从机(slave)的错误日志,看看日志里写了什么再在网上查查相应资料,不过我按这个方法设置了几台机子都是成功的。呵呵。如果你想主从互相同步,那么你只要把主机也加入从机同步的内容也就行了。具体没试过。理论上应该是行的。呵呵。