MySQL 实现双向复制的方法指南_Mysql

简介

我知道有很多文章和指南介绍在互联网上实现主-从复制。在主-从复制中,主机影响从机。但从数据库中的任何更改不会影响主数据库,这篇文章将帮助你实现双向复制。(即,无论是主机还是从机的更改都将影响这两个服务器)。

背景

你能参考Aadhar Joshi的这篇文章实现主从复制,或者您可以按照以下简单的步骤:
参考一下:
在机器A配置主机(192.168.1.30)
在机器B配置从机(192.168.1.29)
我们可以使用下面的步骤来实现这一点
步骤1:机器A设置主机
在主机中打开配置文件 , 默认文件位置为C:\Program Files\MySQL\MySQL Server 5.0\my.ini
在服务端部分用[mysqld]替换[mysqld]

复制代码 代码如下:

server-id=1
  log-bin=mysql-bin
  innodb_flush_log_at_trx_commit=1
  sync_binlog=1
  binlog_do_db= demo
  port=3306

保存配置文件然后关闭
重启mysql服务使其生效。
Step 2 : 机器B设置从机 :
在从机中打开mysql配置文件,默认位置为C:\Program Files\MySQL\MySQL Server 5.0\my.ini
在服务端部分用下面代码替换[mysqld]

复制代码 代码如下:

[mysqld]
server-id=2
log-bin=mysql-bin
innodb_flush_log_at_trx_commit=1
sync_binlog=1

保存配置文件,关闭

重启mysql服务使之生效。
where :
server-id=1 →服务的唯一标识. 在主从中必须不同。
log-bin=mysql-bin →要在InnoDB复制设置中使用事务,保证最好的持久性和一致性, 你应该使用 innodb_flush_log_at_trx_commit=1 and sync_binlog=1.
binlog_do_db= demo →要复制的数据库
port=3306 →默认数据库端口

Step 3 : 主机中创建用户
打开mysql命令行

复制代码 代码如下:

mysql> GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%' IDENTIFIED BY 'replication';

现在我们用这个命令‘show master status'来确定当前二进制日志文件的文件名和位置。记住这个细节!在我们的事例中得到以下输出:

复制代码 代码如下:

mysql> show master status;

复制代码 代码如下:

+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000153 | 106 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

继续:mysql> FLUSH PRIVILEGES;
选择数据库 :mysql> USE newdatabase;
锁数据库防止任何新的更改:FLUSH TABLES WITH READ LOCK;
Step 4: 连接主从 :
打开mysql命令行
停止从机 : Stop slave;
执行命令

复制代码 代码如下:

mysql> CHANGE MASTER TO
 -> MASTER_HOST='192.168.1.30',
 -> MASTER_USER='replicator',
 -> MASTER_PASSWORD='replication',
 -> MASTER_LOG_FILE='mysql-bin.000153',
 -> MASTER_LOG_POS=106;

4. 重启从机开始复制: Start Slave;
同样可以点 Master - Slave Replication.

实现双向复制的方法

第一步: 在从机创建主机用户
打开从机的mysql命令行 (192.168.1.29)
mysql> GRANT REPLICATION SLAVE ON *.* TO 'master_replicator'@'%' IDENTIFIED BY 'master';
现在我们用这个命令‘show master status'来确定当前二进制日志文件的文件名和位置。记住这个细节!在我们的事例中得到以下输出:

复制代码 代码如下:

show master status;

复制代码 代码如下:

+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000153 | 106 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

继续:mysql> FLUSH PRIVILEGES;
选择数据库 :mysql> USE newdatabase;
锁数据库防止任何新的更改:FLUSH TABLES WITH READ LOCK;
Step 2: 用主机用户连接从机(192.168.1.30):
在主机上打开mysql命令行
停止从机 : Stop slave;
执行命令

复制代码 代码如下:

mysql> CHANGE MASTER TO
 -> MASTER_HOST='192.168.1.29',
 -> MASTER_USER='master_replicator',
 -> MASTER_PASSWORD='master',
 -> MASTER_LOG_FILE='mysql-bin.000153',
 -> MASTER_LOG_POS=106;

4. 重启从机开始复制 : Start Slave;
下面命令检查系统状态 :

复制代码 代码如下:

SHOW SLAVE STATUS\G;

你可以看到 192.168.1.30:

复制代码 代码如下:

mysql> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                Master_Host: 192.168.1.29
                Master_User: slave_user
                Master_Port: 3306
              Connect_Retry: 60
            Master_Log_File: mysql-bin.000013
        Read_Master_Log_Pos: 98
             Relay_Log_File: PC-relay-bin.000074
              Relay_Log_Pos: 235
      Relay_Master_Log_File: mysql-bin.000013
           Slave_IO_Running: Yes
          Slave_SQL_Running: Yes
            Replicate_Do_DB: demo
        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: 235
            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
1 row in set (0.01 sec)

复制代码 代码如下:

ERROR:
No query specified

感兴趣的方面

现在你能做些数据库操作,像插入 删除 更新 删表 截断等,也可以检查数据库是否正常工作。
重点记住:
1. 在主机和从机中server_Id 必须不同
2. 验证日志文件是正确的设置
3. 用这些命令检查

复制代码 代码如下:

SHOW SLAVE STATUS\G;

复制代码 代码如下:

Slave_IO_Running: Yes
  Slave_SQL_Running: Yes
  Slave_IO_State: Waiting for master to send event

以上就是本文的全部内容了,希望大家能够喜欢。

请您花一点时间将文章分享给您的朋友或者留下评论。我们将会由衷感谢您的支持!

时间: 2024-09-18 06:28:37

MySQL 实现双向复制的方法指南_Mysql的相关文章

MySQL修改时区的方法小结_Mysql

本文实例总结了MySQL修改时区的方法.分享给大家供大家参考,具体如下: 说明:这里总结记录修改mysql时区的三种方法. 方法一:通过mysql命令行模式下动态修改 1.1 查看mysql当前时间,当前时区 > select curtime(); #或select now()也可以 +-----------+ | curtime() | +-----------+ | 15:18:10 | +-----------+ > show variables like "%time_zon

mysql同步复制搭建方法指南详细步骤_Mysql

1.利用MySQL自身的数据库同步功能(下面参考自网上的文章,写的非常详细了) MySQL从3.23.15版本以后提供数据库复制功能.利用该功能可以实现两个数据库同步,主从模式,互相备份模式的功能. 数据库同步复制功能的设置都在mysql的设置文件中体现.mysql的配置文件(一般是my.cnf),在unix环境下在/etc/mysql/my.cnf或者在mysql用户的home目录下的my.cnf. windows环境中,如果c:根目录下有my.cnf文件则取该配置文件.当运行mysql的wi

mysql 中文乱码 解决方法集锦_Mysql

第一个方法: MySQL 4.1 中文乱码的问题 最近要将 MySQL 4.0 升级到 MySQL 4.1 ,发现了中文乱码的问题,希望以下见解对大家有用. 1. MySQL 4.1 在文字上有很大改进,它有了 Character Set 与 Collation 的慨念. 2. 在 MySQL 4.0 ,一般的程式都会将文字以拉丁文 ( latin) 来储存,就算我们输入中文字,结果仍是放在以拉丁文设置的文字栏里头,这对 MySQL 4.0 与以 MySQL 4.0 为基楚的程式来说,并不会有问

mysql字符集乱码问题解决方法介绍_Mysql

character-set-server/default-character-set:服务器字符集,默认情况下所采用的. character-set-database:数据库字符集. character-set-table:数据库表字符集. 优先级依次增加.所以一般情况下只需要设置character-set-server,而在创建数据库和表时不特别指定字符集,这样统一采用character-set-server字符集. character-set-client:客户端的字符集.客户端默认字符集.

简单的MySQL备份与还原方法分享_Mysql

为了安全起见,需要经常对数据库作备份,或者还原.对于 MySQL 而言,最方便的方法可能就是用 phpMyAdmin 的导出.导入功能了,但如果你的数据库体积比较大,作为 Web 应用的 phpMyAdmin 可能会遭遇"超时"而操作失败.所以,学会在命令行模式下备份.还原数据库,还是很有必要的. Linux系统下 备份数据库 在 Linux 命令行模式下备份 MySQL 数据库,用的是 mysqldump 命令: mysqldump -u mysqluser -p test_db 对

mysql -参数thread_cache_size优化方法 小结_Mysql

说明: 根据调查发现以上服务器线程缓存thread_cache_size没有进行设置,或者设置过小,这个值表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,增加这个值可以改善系统性能.通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用.(-->表示要调整的值) 根据物理

mysql 远程连接数据库的方法集合_Mysql

1.改表法.可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%" 复制代码 代码如下: mysql -u root -pvmwaremysql>use mysql; mysql>update user set host =

MySQL的语法及其使用指南_Mysql

先看看MySQL支持的SQL语句的分类 1,        数据库的选取,创建,丢弃和变更 use create database drap database alter database 2,        数据表和索引的创建,变更和丢弃 create table drop table create index drop index alter index 3,        从数据表检索信息 select union 4,        事务处理 begin commit rollback

MYSQL初学者命令行使用指南_Mysql

MYSQL初学者使用指南与介绍 一.连接MYSQL. 格式: mysql -h主机地址 -u用户名 -p用户密码 1.例1:连接到本机上的MYSQL. 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:mysql> 2.例2:连接到远程主机上的MYSQL.假设远程主机的IP为:110 .110.110.110,用户名为r