两mysql数据库同步实现异步备份方法,数据库双向镜像

对此双向数据库镜像,便是多少库A的数码变动要镜像到数据库B中,同不经常间数据库B里的退换也要同不经常候复制到数据库A里。

1.服务器状态
服务器A:192.168.1.1
服务器B:192.168.1.2

  对于循环数据库镜像,就是多个数据库A、B、C、D等,对内部任四个数据库的修改,都要同有的时候候镜像到其余的数据Curry。

2.创办同步用户
主机域A:192.168.1.2  用户名A:sync_a  密码A:aaa
主机域B:192.168.1.1  用户名B:sync_b  密码B:bbb
最少分配以下放权力限grant replication slave

使用:同二个Zen
Cart网店的数据库和程序,能够停放在不一样的主机上,在任一台主机上增加产量的订单、客户资料,都会同期参与别的的主机数据Curry。

3.执行flush privileges

  要贯彻双向或循环数据库镜像,首先要解决的正是防范数据库中机动递增(AUTO_INCREMENT)字段的争持,以防很多据库各自生成同样的增量值。

4.停止MySQL

  下边以三台主机循环镜像为例,A是B的主镜像,B是C的主镜像,C是A的主镜像。三台主机上MySQL设置文件
/etc /my.cnf 中分别步向上面包车型大巴参数:

5.配置my.cnf(my.ini)

# 主机一:美利坚合众国主机 A, IP: 100.101.102.201
[mysqld]
server-id = 10
log-bin = mysql-bin
log-slave-updates
replicate-same-server-id = 0
auto_increment_increment = 10
auto_increment_offset = 1
master-host = 100.101.102.203
master-user = repl_user
master-password = repl_password
report-host = 100.101.102.201

服务器A 服务器B
user = mysql教程
log-bin = mysql-bin
server-id = 1
binlog-do-db = test
binlog-ignore-db = mysql
replicate-do-db = test
replicate-ignore-db = mysql
log-slave-updates
slave-skip-errors = all
sync_binlog = 1 user = mysql
log-bin = mysql-bin
server-id = 2
binlog-do-db = test
binlog-ignore-db = mysql
replicate-do-db = test
replicate-ignore-db = mysql
log-slave-updates
slave-skip-errors = all
sync_binlog = 1

# 主机二:中国主机 B, IP: 100.101.102.202
[mysqld]
server-id = 20
log-bin = mysql-bin
log-slave-updates
replicate-same-server-id = 0
auto_increment_increment = 10
auto_increment_offset = 2
master-host = 100.101.102.201
master-user = repl_user
master-password = repl_password
report-host = 100.101.102.202

server-id必须独一
binlog-do-db和replicate-do-db表示必要共同的数据库教程
binlog-ignore-db和replicate-ignore-db代表没有须要一块的数据库
请不要参预以下命令,该命令并不会一下子就解决了uid跳号的难点,恰恰相反以下两行命令才是引致uid跳号的主犯祸首
auto_increment_increment = 2
auto_increment_offset = 1

# 主机三:本地主机 C, IP: 100.101.102.203
[mysqld]
server-id = 30
log-bin = mysql-bin
log-slave-updates
replicate-same-server-id = 0
auto_increment_increment = 10
auto_increment_offset = 3
master-host = 100.101.102.202
master-user = repl_user
master-password = repl_password
report-host = 100.101.102.203

6.重新启航MySQL

回顾表明:
server-id:数据库标记,每种数据库标记必须独一;
replicate-same-server-id:设置为0,幸免数据循环更新;
auto_increment_increment:那是循环镜像里最关键的参数之一,表示自动增量为10,那将同意最多10台数据库出席这些循环镜像的阵列,而机关递增字段不会另行。
两mysql数据库同步实现异步备份方法,数据库双向镜像。auto_increment_offset:那是循环镜像里最根本的参数之一,表示偏移值,各个数据库的偏移值必须独一,且在1和auto_increment_increment之间。
master-host:主数据库服务器的IP;
master-user:用于连接主数据库的镜像用户名;
master-password:用于连接主数据库的镜像密码;
report-host:提须求主数据库用于反向连接的IP,因为主数据库不时不可能准确剖断从服务器的IP,所以那边最佳填上从服务器本人的IP地址。

7.进入MySQL控制台

其余,一时只须求镜像有个别数据库,可以在 my.cnf 中参加:
replicate-do-db = db_name1
replicate-do-db = db_name2
replicate-do-db = db_name3

服务器A:
show master status G
flush tables with read lock;
服务器B:
show master status G
flush tables with read lock;

如此那般就不过镜像db_name1/db_name2/db_name3

997755.com澳门葡京 ,而且记录下两台服务器的File和Position,此处倘诺:

借使只是有些数据库不要镜像,能够在 my.cnf 中加入:
replicate-ignore-db=db_name1
replicate-ignore-db=db_name2
replicate-ignore-db=db_name3

A: File: mysql-bin.000001
  Position: 001
B: File: mysql-bin.000002
  Position: 002

这么镜像时就概略 db_name1/db_name2/db_name3 那多个数据库。

服务器A:
change master to
    -> master_host=’192.168.1.2′,
    -> master_user=’sync_b’,
    -> master_password=’bbb’,
    -> master_log_file=’mysql-bin.000002′,
    -> master_log_pos=002;
服务器B:
change master to
    -> master_host=’192.168.1.1′,
    -> master_user=’sync_a’,
    -> master_password=’aaa’,
    -> master_log_file=’mysql-bin.000001′,
    -> master_log_pos=001;

对于循环数据库镜像,…

此地填写的数目完全相反

8.试行show processlist G查看是或不是同步成功

方法二

两台服务器
192.168.1.1(A)
192.168.1.2(B)
先有限支撑那mysql的本子是均等的,参照他事他说加以考察

1.在两台mysql上创制用户,设置权限
A上添加:

#grant replication slave,replication client,reload,super on *.* to
‘sync_user’@’192.168.1.2’ identified by ‘123456’ with grant
option;//用于B访问

B上:

#grant replication slave,replication client,reload,super on *.* to
‘sync_user’@’192.168.1.1’ identified by ‘123456’ with grant
option;//用于A访问

执行  #flush privileges; 更新数据库使用户生效。

2.在/etc/my.cnf上拓展有关布署

A B
server-id         = 1

master-host     =192.168.1.2

master-user     =sync_user

master-pass     =123456

master-port     =3306

master-connect-retry=60

replicate-do-db =db1

replicate-do-db =db2

replicate-ignore-db=mysql  server-id         = 2

master-host     =192.168.1.1

master-user     =sync_user

master-pass     =123456

master-port     =3306

master-connect-retry=60

replicate-do-db =db1

replicate-do-db =db2

replicate-ignore-db=mysql
 
   

注意

1.server_id必须为独一.

2.一旦想要同一时间二只多少个库,增加多行replicate-do-db,每行钦赐三个数据库。不能够动用replicate-do-db=db1,db2的花样

3.replicate-ignore-db:内定不开始展览同步的数据库。

保存后,重启mysql

#mysqladmin -u root -p shutdown

#mysqld_safe –user=mysql

3.把两台服务器上急需一齐的数据库举行拷贝,保障这两台数据库早先状态同样。

4.拓展双向同步

双向同步正是把单向联合反过来在做一回,但确实无疑要小心操作的逐条,那是打响的关键

step1.在A上mysql shell中执行

#show master status;

+——————+———-+————–+——————+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+——————+———-+————–+——————+

| mysql-bin.000054 |    35 |              |                  |

+——————+———-+————–+——————+

1 row in set (0.00 sec)

记录下 mysql-bin.000054,和35

step2.在B上执行:

#stop slave;//停止同步

#

CHANGE MASTER TO  MASTER_HOST=’192.168.1.1′, MASTER_PORT=3306,
MASTER_USER=’sync_user’, MASTER_PASSWORD=’123456′,
MASTER_LOG_FILE=’mysql-bin.000054′, MASTER_LOG_POS=35;

 

#start slave;//开始同步

step3,实施show slave statusG;如出示如下内容,表示同步设置成功。

Slave_IO_State: Waiting for master to send event

 

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

step4:上一步没不常。则在B上继续实行show master status;

#show master status;

+——————+———-+————–+——————+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+——————+———-+————–+——————+

| mysql-bin.000005 |    6854 |              |                  |

+——————+———-+————–+——————+

1 row in set (0.00 sec)

step5:在A上执行

#stop slave;//结束同步

#

CHANGE MASTER TO  MASTER_HOST=’192.168.1.2′, MASTER_PORT=3306,
MASTER_USER=’sync_user’, MASTER_PASSWORD=’123456′,
MASTER_LOG_FILE=’mysql-bin.000005′, MASTER_LOG_POS=6854;

 

#start slave;//初叶联合

 

step6:实施show slave statusG;如出示如下内容,表示同步设置成功。

 

Slave_IO_State: Waiting for master to send event

 

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

如上述未有何难点。到此双向同步设置完毕。

方法三

一、计划服务器
是因为MySQL不一致版本之间的(二进制日志)binlog格式可能会分裂样,因而最棒的烘托组合是Master的MySQL版本和Slave的本子同样只怕更低,Master的本子鲜明不可能高于Slave版本。
more.. | less.. |
本文中,大家假诺主服务器(以下简称Master)和从服务器(以下简称Slave)的版本都以5.0.27,操作系统是RedHat
Linux 9。
假若同步Master的主机名称为:master(IP:192.168.1.123),Slave主机名字为:slave(IP:192.168.1.124),2个MySQL的basedir目录都是/usr/local/mysql,datadir都以:/var/lib/mysql。
二、设置同步服务器
1、设置同步Master
修改 my.cnf 文件,在
# Replication Master Server (default)
# binary logging is required for replication
加上如下内容:
#log-bin=/var/log/mysql/updatelog
server-id = 1
binlog-do-db=discuz
binlog-ignore-db=mysql
重启MySQL,创立一个MySQL帐号为一同专项使用
# /usr/local/mysql/bin/mysql -u root -p
mysql> GRANT REPLICATION SLAVE ON *.* TO
[email=]’back’@’%'[/email] IDENTIFIED BY ‘back’;
一经想要在Slave上有权限实践 “LOAD TABLE FROM MASTEXC90” 或 “LOAD DATA FROM
MASTE奥迪Q3” 语句的话,必须给予全局的 FILE 和 SELECT 权限:
mysql>GRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO 
[email=]’back’@’%'[/email] IDENTIFIED BY ‘back’;
mysql> FLUSH PRIVILEGES ;

2、设置同步Slave
修改my.cnf文件,添加
server-id = 2
master-host = 192.168.1.123
master-user = back
master-password = back
master-port = 3306
replicate-ignore-db=mysql
replicate-do-db=discuz

重启MySQL

3、运营同步
在主服务器master MySQL命令符下:
# /usr/local/mysql/bin/mysql -u root -p
mysql> show master status;
来得(当然这么些是本身机器的状态,你的不恐怕跟自个儿同样哈,只是个例证):
+——————+———-+——————-+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+——————-+——————+
| mysql-bin.000009 | 98 | discuz | mysql |
+——————+———-+——————-+——————+

在从服务器master MySQL命令符下:
# /usr/local/mysql/bin/mysql -u root -p
mysql> slave stop;
mysql> change master to master_host=’192.168.1.123′,
master_user=’back’, master_password=’back’,
master_log_file=’mysql-bin.000009′, master_log_pos=98;
mysql> slave start;

用show slave statusG;看一下从服务器的一路情状
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
假若都以yes,那表示已经在一同
往表里面写点数据测验一下看是否同步成功,假设不成事,相对不是你的RP难点,再检查一下操作步骤!

4、设置双向同步

修改slave服务器的my.cnf,增多
log-bin=/var/log/mysql/updatelog
binlog-do-db=discuz
binlog-ignore-db=mysql

重启MySQL,创造二个MySQL帐号为共同专项使用
mysql> GRANT REPLICATION SLAVE ON *.* TO
[email=]’back’@’%'[/email] IDENTIFIED BY ‘back’;
mysql> GRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO 
[email=]’back’@’%'[/email] IDENTIFIED BY ‘back’;
mysql> FLUSH PRIVILEGES ;

修改master服务器的my.cnf,增添
master-host = 192.168.1.124
master-user = back
master-password = back
master-port = 3306
replicate-ignore-db=mysql
replicate-do-db=discuz

重启MySQL

在主服务器slave MySQL命令符下:
show master status;
+——————+———-+——————-+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+——————-+——————+
| mysql-bin.000013 | 98 | discuz | mysql |
+——————+———-+——————-+——————+

在服务器A MySQL命令符下:
mysql> slave stop;
mysql> change master to master_host=’192.168.1.124′,
master_user=’back’, master_password=’back’,
master_log_file=’mysql-bin.000013′, master_log_pos=98;
mysql> slave start;

实际上也正是A->B单向一齐的反向操作!双向同步,就好像此简单啦!

提示:假诺改变了主服务器的布局,记得删除从服务器上的master.info文件。不然从服务器使用的依旧老配置,只怕会变成错误。

小心:关于要复制七个数据库时,binlog-do-db和replicate-do-db选项的装置,网络海人民广播电视台湾大学人视为用半角逗号分隔,经过测量试验,这样的传道是不当的,MySQL官方文书档案也鲜明提出,即便要备份多少个数据库,只要重复设置相应选项就能够了。
比如:
binlog-do-db=a
binlog-do-db=b
replicate-do-db=a
replicate-do-db=b

服务器A:192.168.1.1
服务器B:192.168.1.2 2.开立同步用户 主机域A:192.168.1.2
用户名A:sync_a 密码A:aaa 主机域B:192.168.1.1 用户名…

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website