加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

Linux下的MYSQL主主复制的用处

发布时间:2022-01-21 00:18:32 所属栏目:MySql教程 来源:互联网
导读:这篇文章主要讲解了Linux下的MYSQL主主复制的用法,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习Linux下的MYSQL主主复制的用法吧! 为什么,会有mysql的主主复制。因为在一些高可用的环境中,mysql的主从
       这篇文章主要讲解了“Linux下的MYSQL主主复制的用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux下的MYSQL主主复制的用法”吧!
 
      为什么,会有mysql的主主复制。因为在一些高可用的环境中,mysql的主从不能满足现实中的一些实际需求。比如,一些流量大的网站数据库访问有了瓶颈,需要负载均衡的时候就用两个或者多个的mysql服务器,而这些mysql服务器的数据库数据必须要保持一致,那么就会用到主主复制。
 
      mysql主从架构中其实就一个主在工作,而从就相当于一个备份机器,从通过日志监测的方式来备份主库上的数据而保证主库的数据安全。在这种架构中如果从上的数据做了改变,主数据是不会用任何变化的。因为mysql主从架构主要是mysql从监控mysql主的日志变化来实现同步,相反的在这个架构中主并没有监控从的日志变化。所以,mysql从数据反生变化,主也就没有什么变化了。
 
通过上述描述,可以看到如果想实现主主复制,无非就是在mysql主从架构上让mysql主实现监测从的日志变化,从而实现两台机器相互同步。(主从的架构前面有博文http://duyunlong.blog.51cto.com/1054716/1102237)
 
实验环境:两台服务器:
 
主机名: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_passwordport            = 3306socket          = /usr/local/mysql/tmp/mysql.sock# Here follows entries for some specific programs# The MySQL server[mysqld]port            = 3306socket          = /usr/local/mysql/tmp/mysql.sock
skip-external-locking
key_buffer_size = 384M
max_allowed_packet = 1M
table_open_cache = 512sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8query_cache_size = 32M# Try number of CPU's*2 for thread_concurrencythread_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 replicationlog-bin=mysql-binlog-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 omittedserver-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_passwordport            = 3306socket          = /usr/local/mysql/tmp/mysql.sock# Here follows entries for some specific programs# The MySQL server[mysqld]port            = 3306socket          = /usr/local/mysql/tmp/mysql.sock
skip-external-locking
key_buffer_size = 384M
max_allowed_packet = 1M
table_open_cache = 512sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8query_cache_size = 32M# Try number of CPU's*2 for thread_concurrencythread_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 replicationlog-bin=mysql-binlog-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 omittedserver-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: 0Master_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: 101 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: 0Master_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: 11 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 -h292.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 -h292.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 -h292.168.1.231 -e 'create database a;'[root@HA1 ~]# mysql mysql -uduyunlong -p123456 -h292.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 -h292.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 -h292.168.1.232 -e 'create database b;'[root@HA2 ~]# mysql mysql -uduyunlong -p123456 -h292.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 -h292.168.1.231 -e 'show databases;'+--------------------+| Database           |+--------------------+| information_schema || a                  || b                  || mysql              || performance_schema || test               || wanghaipeng        |+--------------------+[root@HA1 ~]#
在HA1(192.168.1.231)可以看到数据库“b”已经复制过来了。
 
那么到此,主主复制架构已经成功!
 
感谢各位的阅读,以上就是“Linux下的MYSQL主主复制的用法”的内容了,经过本文的学习后,相信大家对Linux下的MYSQL主主复制的用法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读