`
kobe学java
  • 浏览: 257929 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

不同服务器上的mysql数据库如何实现同步异步备份

 
阅读更多

1.服务器状态
服务器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  用户名B:sync_b  密码B:bbb
至少分配以下权限grant replication slave

3.执行flush privileges

4.停止MySQL

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

服务器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

server-id必须唯一
binlog-do-db和replicate-do-db表示需要同步的数据库
binlog-ignore-db和replicate-ignore-db表示不需要同步的数据库
请不要加入以下命令,该命令并不会解决uid跳号的问题,恰恰相反以下两行命令才是导致uid跳号的罪魁祸首
auto_increment_increment = 2
auto_increment_offset = 1

6.重新启动MySQL

7.进入MySQL控制台

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

同时记录下两台服务器的File和Position,此处假设:

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

服务器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的版本是一致的,参考http://dev.mysql.com/doc/refman/5.1/zh/replication.html#replication-implementation-details,否则复制中的异常情况很折腾人。


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 MASTER" 或 "LOAD DATA FROM MASTER" 语句的话,必须授予全局的 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

 

分享到:
评论

相关推荐

    Mysql一键数据库同步和主主同步脚本

    MySQL数据库同步和主主同步是数据库管理中的重要概念,尤其对于需要实时数据共享或高可用性的系统至关重要。这里我们详细探讨这两个主题,并介绍如何通过特定的脚本来简化这一过程。 首先,**数据库同步**指的是将...

    基于PHP和MYSQL数据库实现的网上图书管理系统源码(含数据库以及设计文档).rar

    该资源是一个基于PHP编程语言和MySQL数据库实现的网上图书管理系统的完整源代码包,同时也包含了相关的数据库文件和设计文档。这个系统旨在为用户提供一个便捷、高效的在线图书查询、浏览、购买或租赁的服务平台。...

    MySQL数据库双机热备份实施方案.pdf

    【MySQL数据库双机热备份实施方案】是指在两个服务器上配置MySQL数据库,以实现高可用性和数据安全性。在主服务器(Master)上进行的所有数据更改都会实时地、异步地复制到备用服务器(Slave)。这种配置被称为双机...

    MySQL实时备份服务器工具

    SQL Tools备份是一种专门用于MySQL数据库的备份工具,它可以高效地解析主服务器的二进制日志,并快速地在从服务器上执行备份操作。该工具可能具有以下功能: 1. 实时备份:通过监控主服务器的binlog,实时将更改...

    MYSQL如何实现双机热备份

    MySQL数据库的双机热备份,也称为高可用性(High Availability, HA)配置,是确保数据安全性、系统连续性和业务不中断的关键技术。在大型的Web应用或关键业务环境中,数据库服务不能出现长时间的停机,因此需要实施...

    MySQL数据库实时增量同步工具源代码.zip

    综上所述,MySQL数据库实时增量同步工具源代码的分析和利用对于数据库管理员和开发者来说,是一次深入学习和优化数据库管理策略的好机会,同时也为实现高效、可靠的分布式数据系统提供了可能。通过理解和改进源代码...

    Mysql数据库规范.docx

    MySQL数据库规范是数据库设计和管理中的重要指导原则,旨在提高数据库的性能、稳定性和可维护性。MySQL作为一款广泛应用的关系型数据库管理系统,其历史可以追溯到1979年,由Monty Widenius编写,经过多次迭代和收购...

    MySQl数据库应用2022版

    10. **复制与集群**:学习MySQL的复制技术,如异步复制、半同步复制,以及如何构建主从复制架构,以实现高可用性和负载均衡。 11. **云数据库服务**:介绍如何在云环境下部署和管理MySQL,如Amazon RDS、Google ...

    Mysql数据库集群

    ### MySQL数据库集群关键技术知识点 #### 一、MySQL高可用性解决方案概述 - **定义与重要性**:在当今商业环境中,信息及其可访问性不仅构成了基础设施的基础,而且往往是某些组织整个收入模型的核心。因此,保持...

    mysql数据库同步

    MySQL数据库同步是指在两个或多个数据库之间保持数据一致性的过程,这对于分布式系统、备份策略以及高可用性架构至关重要。在本篇文章中,我们将探讨MySQL数据库同步的原理、常见方法及其实现步骤。 首先,让我们...

    MySQL云数据库服务的实现.pdf

    在云环境中,MySQL数据库服务的实现涉及到高可用性、可扩展性和容灾恢复等多个方面。这里,我们将深入探讨几个关键概念和技术,包括消息队列(如RabbitMQ)、分布式协调器ZooKeeper以及MySQL的主从复制策略。 首先...

    MYSQL数据库管理教程

    MySQL数据库管理系统是一款开源、免费的关系型数据库...综上,本教程将涵盖MySQL数据库管理的各个方面,从基础操作到高级应用,旨在帮助读者熟练掌握MySQL的管理和使用,为实际工作中的数据存储和处理提供强大支持。

    线上Mysql数据库日常维护与管理

    ### 线上Mysql数据库日常维护...综上所述,对于线上MySQL数据库的维护和管理不仅涉及到日常的基本操作,还需要考虑到数据安全、性能监控等多个方面。通过上述介绍的方法和技术,可以有效地提升数据库的稳定性和可用性。

    mysql主从同步镜像备份镜像备份汇编.pdf

    - **主从复制机制**:MySQL中的主从复制是一种数据复制技术,它将一个MySQL服务器(主服务器)的数据异步复制到一个或多个其他MySQL服务器(从服务器)。这种机制主要用于实现数据冗余、负载均衡以及提高系统的可用...

    MYSQL.rar_MYSQL_mysql 优化_mysql优化_mysql备份_sql优化

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,用于存储和管理各种类型的数据。为了确保数据库高效运行,需要进行一系列的优化操作,...通过学习和实践,你可以更好地管理和维护MySQL数据库,应对各种业务挑战。

    mysql主从数据库配置

    MySQL主从数据库配置是数据库高可用性和负载均衡的重要实践,它允许数据从一个主数据库(Master)异步复制到一个或多个从数据库(Slave)。这种配置对于处理大规模数据操作和保证数据一致性至关重要。 主从复制的...

    MySQL 数据库面试题

    able1.id = Table2.id; 3. SELECT * FROM Table1 RIGHT JOIN Table2 ON Table1....了解并掌握这些知识点将极大地提升你对MySQL数据库的理解和应用能力,无论是在面试、个人学习还是实际工作中,都能让你更加得心应手。

    后端mysql数据库,引入库文件,Qt群控系统

    在构建一个后端系统时,MySQL数据库经常被选作数据存储解决方案,因为它具有高效、稳定和广泛支持的特点。Qt群控系统则是一个基于Qt库开发的控制台或图形用户界面应用,用于管理多个MySQL数据库实例,提升管理和操作...

Global site tag (gtag.js) - Google Analytics