mysql主从架构中其实就一个主在工作,而从就相当于一个备份机器,从通过日志监测的方式来备份主库上的数据而保证主库的数据安全。在这种架构中如果从上的数据做了改变,主数据是不会用任何变化的。因为mysql主从架构主要是mysql从监控mysql主的日志变化来实现同步,相反的在这个架构中主并没有监控从的日志变化。所以,mysql从数据反生变化,主也就没有什么变化了。
通过上述描述,可以看到如果想实现主主复制,无非就是在mysql主从架构上让mysql主实现监测从的日志变化,从而实现两台机器相互同步。(主从的架构前面有博文 http://www.linuxidc.com/Linux/2013-10/91682.htm )
实验环境:两台服务器:
主机名:HA1,HA2(呵呵,这个主机名是英文缩写High availability,高可用的意思)
ip:

192.168.1.231

192.168.1.232

主机系统:CentOS6.4
mysql版本5.5.22
首先,看下HA1(192.168.1.231)的mysql配置文件
vim /etc/my.cnf 
# Example MySQL config file for very large systems. 

# This is for a large system with memory of 1G-2G where the system runs mainly 
# MySQL. 

# MySQL programs look for option files in a set of 
# locations which depend on the deployment platform. 
# You can copy this option file to one of those 
# locations. For information about these locations, see: 
# http://dev.mysql.com/doc/mysql/en/option-files.html 

# In this file, you can use all long options that a program supports. 
# If you want to know which options a program supports, run the program 
# with the "--help" option. 
# The following options will be passed to all MySQL clients 
[client] 
#password      = your_password 
port            = 3306
socket          = /usr/local/mysql/tmp/mysql.sock 

# Here follows entries for some specific programs 
# The MySQL server 
[mysqld] 
port            = 3306
socket          = /usr/local/mysql/tmp/mysql.sock 
skip-external-locking 
key_buffer_size = 384M
max_allowed_packet = 1M
table_open_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M
# Try number of CPU's*2 for thread_concurrency 
thread_concurrency = 8
# Don't listen on a TCP/IP port at all. This can be a security enhancement, 
# if all processes that need to connect to mysqld run on the same host. 
# All interaction with mysqld must be made via Unix sockets or named pipes. 
# Note that using this option without enabling named pipes on Windows 
# (via the "enable-named-pipe" option) will render mysqld useless! 

#skip-networking 
# Replication Master Server (default) 
# binary logging is required for replication 
log-bin=mysql-bin
log-slave-updates 

# required unique id between 1 and 2^32 - 1 
# defaults to 1 if master-host is not set 
# but will not function as a master if omitted 
server-id      = 1

在这个配置文件中,需要特别注意的三处地方:
log-bin=mysql-bin:这个选项基本默认都是开着的,如果没有打开,可以手动打开。
log-slave-updates:这个选项特别的重要它是为了让slave也能充当master,同时也为了更好的服务于 m-m + s 的环境,保证slave挂在任何一台master上都会接收到另一个master的写入信息。当然不局限于这个架构,级联复制的架构同样也需要log-slave-updates的支持。
server-id = 1:这个ID为服务器ID如果配置一样会出现冲突,而不能复制
接着再看下HA2(192.168.1.232)的mysql配置文件
vim /etc/my.cnf 
# Example MySQL config file for very large systems. 

# This is for a large system with memory of 1G-2G where the system runs mainly 
# MySQL. 

# MySQL programs look for option files in a set of 
# locations which depend on the deployment platform. 
# You can copy this option file to one of those 
# locations. For information about these locations, see: 
# http://dev.mysql.com/doc/mysql/en/option-files.html 

# In this file, you can use all long options that a program supports. 
# If you want to know which options a program supports, run the program 
# with the "--help" option. 
# The following options will be passed to all MySQL clients 
[client] 
#password      = your_password 
port            = 3306
socket          = /usr/local/mysql/tmp/mysql.sock 
# Here follows entries for some specific programs 
# The MySQL server 
[mysqld] 
port            = 3306
socket          = /usr/local/mysql/tmp/mysql.sock 
skip-external-locking 

key_buffer_size = 384M
max_allowed_packet = 1M
table_open_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M
# Try number of CPU's*2 for thread_concurrency 
thread_concurrency = 8
# Don't listen on a TCP/IP port at all. This can be a security enhancement, 
# if all processes that need to connect to mysqld run on the same host. 
# All interaction with mysqld must be made via Unix sockets or named pipes. 
# Note that using this option without enabling named pipes on Windows 
# (via the "enable-named-pipe" option) will render mysqld useless! 

#skip-networking 
# Replication Master Server (default) 
# binary logging is required for replication 
log-bin=mysql-bin
log-slave-updates 

# required unique id between 1 and 2^32 - 1 
# defaults to 1 if master-host is not set 
# but will not function as a master if omitted 
server-id      = 10
# Replication Slave (comment out master section to use this)

在HA2的mysql配置文件中,除了server-id不一样,其他几乎一模一样。配置文件写好后,我们把两台服务器上的mysql服务器启动起来。

首先,登录HA2(192.168.1.232)的mysql中,查看master状态
mysql> show master status; 
+------------------+----------+--------------+------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
+------------------+----------+--------------+------------------+
| mysql-bin.000016 |      615 |              |                  | 
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec) 
mysql>

然后,登录HA1(192.168.1.231)的msyql中,把HA2配置成自己的主,

在做这个之前先在两台机器的mysql中建立一个可以复制用的帐号:
mysql>grant all on *.* to duyunlong@'192.168.1.%' identified by '123456'; 
Query OK, 0 rows affected (0.01 sec) 
mysql>change master to master_host='192.168.1.232',master_user='duyunlong',master_password='123456',master_log_file='mysql-bin.000016',master_log_pos=615;

同上,查看HA1(192.168.1.231)master,然后登录HA2(192.168.1.232),把HA1(192.168.1.231),配置成自己的主,然后分别在两台机器的mysql中,启动slave
启动后HA1状态
mysql> show slave status \G; 
*************************** 1. row ***************************
              Slave_IO_State: Waiting for master to send event 
                  Master_Host: 192.168.1.232
                  Master_User: duyunlong 
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000016
          Read_Master_Log_Pos: 615
              Relay_Log_File: HA1-relay-bin.000002
                Relay_Log_Pos: 346
        Relay_Master_Log_File: mysql-bin.000016
            Slave_IO_Running: Yes 
            Slave_SQL_Running: Yes 

              Replicate_Do_DB: 
          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: 615
              Relay_Log_Space: 500
              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
Master_SSL_Verify_Server_Cert: No 
                Last_IO_Errno: 0
                Last_IO_Error: 
              Last_SQL_Errno: 0
              Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
            Master_Server_Id: 10
1 row in set (0.00 sec) 
ERROR: 
No query specified

可以看到 Slave_IO_Running: Yes
Slave_SQL_Running: Yes
然后在看HA2的状态:
mysql> show slave status \G; 
*************************** 1. row ***************************
              Slave_IO_State: Waiting for master to send event 
                  Master_Host: 192.168.1.231
                  Master_User: duyunlong 
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000018
          Read_Master_Log_Pos: 552
              Relay_Log_File: HA2-relay-bin.000002
                Relay_Log_Pos: 441
        Relay_Master_Log_File: mysql-bin.000018
            Slave_IO_Running: Yes 
            Slave_SQL_Running: Yes 
              Replicate_Do_DB: 
          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: 552
              Relay_Log_Space: 595
              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
Master_SSL_Verify_Server_Cert: No 
                Last_IO_Errno: 0
                Last_IO_Error: 
              Last_SQL_Errno: 0
              Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
            Master_Server_Id: 1
1 row in set (0.00 sec) 
ERROR: 
No query specified

可以看到Slave_IO_Running: Yes
Slave_SQL_Running: Yes
接下来,我们要测试,是不是已经可以主主复制了呢,首先登录HA1(192.168.1.231)的mysql中,建立一数据库,当然在测试前我们先看下,两台服务器中的mysql中有哪些数据
首先看下HA1(192.168.1.231)
[root@HA1 ~]# mysql mysql -uduyunlong -p123456 -h192.168.1.231 -e 'show databases;' 
+--------------------+
| Database          | 
+--------------------+
| information_schema | 
| mysql              | 
| performance_schema | 
| test              | 
| wanghaipeng        | 
+--------------------+
[root@HA1 ~]#

再看下HA2(192.168.1.232)
[root@HA2 ~]# mysql mysql -uduyunlong -p123456 -h192.168.1.232 -e 'show databases;' 
+--------------------+
| Database          | 
+--------------------+
| information_schema | 
| mysql              | 
| performance_schema | 
| test              | 
| wanghaipeng        | 
+--------------------+
[root@HA2 ~]#

可以看到,现在两台服务器上的mysql中数据是一样的,接下来在HA中建立一数据库“a”,再看结果
[root@HA1 ~]# mysql mysql -uduyunlong -p123456 -h192.168.1.231 -e 'create database a;' 
[root@HA1 ~]# mysql mysql -uduyunlong -p123456 -h192.168.1.231 -e 'show databases;' 
+--------------------+
| Database          | 
+--------------------+
| information_schema | 
| a                  | 
| mysql              | 
| performance_schema | 
| test              | 
| wanghaipeng        | 
+--------------------+
[root@HA1 ~]#

然后看下HA2(192.168.1.232)是不是会把刚建立的数据库“a”复制过来
[root@HA2 ~]# mysql mysql -uduyunlong -p123456 -h192.168.1.232 -e 'show databases;' 
+--------------------+
| Database          | 
+--------------------+
| information_schema | 
| a                  | 
| mysql              | 
| performance_schema | 
| test              | 
| wanghaipeng        | 
+--------------------+

可以看到,数据库“a”已经成功复制过来了,反过来我们在HA2(192.168.1.232)上建立一数据库“b”看是否HA1也可以复制过去
[root@HA2 ~]# mysql mysql -uduyunlong -p123456 -h192.168.1.232 -e 'create database b;' 
[root@HA2 ~]# mysql mysql -uduyunlong -p123456 -h192.168.1.232 -e 'show databases;' 
+--------------------+
| Database          | 
+--------------------+
| information_schema | 
| a                  | 
| b                  | 
| mysql              | 
| performance_schema | 
| test              | 
| wanghaipeng        | 
+--------------------+
[root@HA2 ~]#

然后登录HA1(192.168.1.231),查看是否复制成功
[root@HA1 ~]# mysql mysql -uduyunlong -p123456 -h192.168.1.231 -e 'show databases;' 
+--------------------+
| Database          | 
+--------------------+
| information_schema | 
| a                  | 
| b                  | 
| mysql              | 
| performance_schema | 
| test              | 
| wanghaipeng        | 
+--------------------+
[root@HA1 ~]#

在HA1(192.168.1.231)可以看到数据库“b”已经复制过来了。
那么到此,主主复制架构已经陈功!

本文转自 chengxuyonghu 51CTO博客,原文链接:http://blog.51cto.com/6226001001/1736944,如需转载请自行联系原作者

Linux下的MySQL主主复制相关推荐

  1. 定时任务-Quartz、Mycat简单入门、Linux下安装MySQL、Linux下安装MyCAT、Mycat的数据库分片、Mycat读写分离

    表现层:页面 后台管理系统.商城门户.搜索系统.订单系统.商品详情系统.购物车系统 中间件:dubbo 系统之间的通信,服务的统计,rpc协议远程过程调用 同步通信 服务层:实现具体的业务逻辑 商品服 ...

  2. linux下,MySQL默认的数据文档存储目录为/var/lib/mysql。

    0.说明 Linux下更改yum默认安装的mysql路径datadir. linux下,MySQL默认的数据文档存储目录为/var/lib/mysql. 假如要把MySQL目录移到/home/data ...

  3. Linux下修改Mysql数据库存放路径

    Linux下修改Mysql数据库存放路径 原路径:/var/lib/mysql 目标路径:/home/data/mysql 1.home目录下建立data目录 cd /home mkdir data ...

  4. linux mysql 编码修改,Linux下修改MySQL编码的方法

    这篇文章主要为大家详细介绍了Linux下修改MySQL编码的方法,具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小编小韵来看看吧! 默认登录mysql之后可以通过SH ...

  5. linux mysql 数据文件,Linux下修改MySQL数据库数据文件路径的步骤

    使用rpm安装方式安装完MySQL数据库后,数据文件的默认路径为/var/lib/mysql,然而根目录并不适合用于存储数据文件. 原路径:/var/lib/mysql 目标路径:/home/mysq ...

  6. linux下安装mysql的方式_linux下安装mysql的两种方式

    linux下安装mysql的两种方式 1 源码安装 1 创建mysql用户: useradd mysql passwd mysql 2 解压缩下载的mysql包: tar -zxvf mysql-5. ...

  7. Linux下查看MySQL的安装路径

    Linux下查看mysql.apache是否安装,并卸载. 指令 ps -ef|grep mysql 得出结果 root     17659     1  0  2011 ?        00:00 ...

  8. 【云服务器部署】---Linux下安装MySQL

    [云服务器部署]---Linux下安装MySQL 有关如何阿里云ECS建网站,推荐一片文章,我是是通过这篇文章安装tomcat和jdk的 网址:阿里云ECS建网站(建站)超详细全套完整图文教程! 注意 ...

  9. Linux下修改MySQL密码

    Linux下修改MySQL密码 在Linux系统中安装MySQL后出现无法登录的情况,错误显示为:** ERROR 1698 (28000): Access denied for user 'root ...

  10. Linux下配置mysql密码

    Linux下配置mysql密码 Linux下配置mysql密码有两种情况: 一.首次登录mysql未设置密码或忘记密码解决方法: 二.已经配置密码对原有密码进行更改. 一.首次登录mysql未设置密码 ...

最新文章

  1. WinCvs提示:import requires write access to the repository
  2. 读书笔记-《增长黑客》-搭建增长团队
  3. python下载大文件-python requests 下载大文件不完整
  4. 协同旋转不变网格形变
  5. E - 嗯? 51Nod - 1432(二分)
  6. 藉上帝之旨,行时代之命的文学长征
  7. 全国计算机等级考试题库二级C操作题100套(第17套)
  8. 华为笔记本软件商店_华为应用市场 PC 端体验:干净好用 - 华为
  9. 工业级光纤收发器的“附加属性“功能介绍
  10. lisp修改界址线属性_地籍与房产测量 A卷答案
  11. Linux中Tomcat 服务的搭建
  12. atlas 200 下载CANN包,搭建运行环境
  13. 如何将php文件通过后台导入,如何将通过url传到php后台的json在后台再次转换为json格式?...
  14. 水滴石穿之子页面的滚动条设置 表格的固定高度宽度问题 复制带格式的文本...
  15. 结构体链表赋值与删除
  16. ajaxSubmit
  17. 【SVN】Eclipse SVN插件下载安装
  18. 微型计算机补码运算电路特点,二进制数的运算及其加法电路
  19. 图片上传时,显示格式错误怎么办?
  20. python 微博自动点赞软件_Python微博工具人,每日一句英语自动发

热门文章

  1. JAVA 没有重载运算符,那么 String 类型的加法是怎么实现的,以及String类型不可变的原因和好处...
  2. [Ext JS6]路由(Routing)及使用
  3. 蛋糕matlab,用matlab绘制生日蛋糕
  4. 手机通讯录c语言导入手机软件,有什么软件能快速将手机通讯录的联系人传到另一个手机上...
  5. 微金融php源码下载,ThinkPHP金融微盘微交易系统平台源码
  6. jquery根据身份证号码计算出生日期、年龄、性别代码
  7. Spring Data Jpa的@Temporal注解
  8. tomcat的localhost_access_log日志文件
  9. Myeclipse包变成文件夹
  10. Linux下的hostname命令