zoukankan      html  css  js  c++  java
  • mysql主从复制——双机互为主从

    第一、mysql主从复制(一主一从)
    怎么安装mysql数据库,这里不说了,只说它的主从复制,步骤如下:
    首先需要做一些清理工作,如果之前配置了主从,但是配置失败了。结果会在/var/lib/mysql/中残留很多主从相关的配置文件,如果想从新开始配置,最好是删除主从设置相关的文件后,再开始配置。下面是mysql从来没有配过主从的该目录原始的文件,如下:
    [root@server201:~]$ls /var/lib/mysql/
    asterisk  asteriskcdrdb  bgcrm  ibdata1  ib_logfile0  ib_logfile1  mysql  mysql.sock
    [root@server201:~]$
    如果是配置过主从,那么需要清理如下红色标记的文件:
    [root@server201:~]$ls /var/lib/mysql/
    asterisk       bgcrm    ib_logfile0  master.info  mysql-bin.000001  mysqld-relay-bin.000001  mysql.sock      test_db
    asteriskcdrdb  ibdata1  ib_logfile1  mysql        mysql-bin.index   mysqld-relay-bin.index   relay-log.info
    [root@server201:~]$

    清理工作做好后,开始配置。
    1、主从服务器分别作以下操作:
      1.1、版本一致
      1.2、初始化表,并在后台启动mysqld
      1.3、修改root的密码,最好root密码不要是空

    2、修改主服务器master(IP: 192.168.1.201):
       #vi /etc/my.cnf
           [mysqld]
           log-bin=mysql-bin   //[必须]启用二进制日志
           server-id=201       //[必须]服务器唯一ID,默认是1,一般取IP最后一段

    3、修改从服务器slave(IP: 192.168.1.202):
       #vi /etc/my.cnf
           [mysqld]
           log-bin=mysql-bin   //[必须]启用二进制日志
           server-id=202       //[必须]服务器唯一ID,默认是1,一般取IP最后一段

    4、重启两台服务器的mysql
       /etc/init.d/mysql restart

    5、在主服务器上建立帐户并授权slave用户可以访问:
       #mysql -uroot -p   
       mysql>GRANT REPLICATION SLAVE ON *.* to 'slave'@'%' identified by '000000'; //一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如从服务器192.168.1.202,加强安全。
       mysql>GRANT REPLICATION SLAVE ON *.* to 'slave'@'192.168.1.202' identified by '000000';

    6、登录主服务器的mysql,查询master的状态
       mysql>show master status;
       +------------------+----------+--------------+------------------+
       | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
       +------------------+----------+--------------+------------------+
       | mysql-bin.000001 |      237 |              |                  |
       +------------------+----------+--------------+------------------+
       1 row in set (0.00 sec)
       注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

    7、**配置从服务器Slave【注意这里是配置从服务器的,要在从服务器上执行,不要搞错了】:
       mysql>change master to master_host='192.168.1.201',master_user='slave',master_password='000000',master_log_file='mysql-bin.000001',master_log_pos=237;  //注意不要断开,“237”无单引号。

       Mysql>start slave;    //启动从服务器复制功能

    8、检查从服务器复制功能状态:
       mysql> show slave statusG
       *************************** 1. row ***************************
                    Slave_IO_State: Waiting for master to send event  //说明配置成功
                       Master_Host: 192.168.2.222  //主服务器地址
                       Master_User: myrync         //授权帐户名,尽量避免使用root
                       Master_Port: 3306           //数据库端口,部分版本没有此行
                     Connect_Retry: 60
                   Master_Log_File: mysql-bin.000001
               Read_Master_Log_Pos: 600        //#同步读取二进制日志的位置,大于等于>=Exec_Master_Log_Pos
                    Relay_Log_File: ddte-relay-bin.000003
                     Relay_Log_Pos: 251
             Relay_Master_Log_File: mysql-bin.000004
                  Slave_IO_Running: Yes       //此状态必须YES
                 Slave_SQL_Running: Yes       //此状态必须YES
                        ......
    注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。
    以上操作过程,主从服务器配置完成。

    9、主从服务器测试:
    主服务器Mysql,建立数据库,并在这个库中建表插入一条数据:
      mysql> create database test_db;
      Query OK, 1 row affected (0.00 sec)

      mysql> use test_db;
      Database changed

      mysql> create table test_tb(id int(3),name char(10));
      Query OK, 0 rows affected (0.00 sec)
     
      mysql> insert into test_tb values(001,'aaa');
      Query OK, 1 row affected (0.00 sec)

    下面在从服务器上面查询是否创建了数据库和表,表里面是否有记录。
     
    10、完成:
        编写一shell脚本,用nagios监控slave的两个“yes”,如发现只有一个或零个“yes”,就表明主从有问题了,发短信警报吧。

    ==============================================

    第二、mysql主从复制(互为主从)
    参考文章:
    http://blog.csdn.net/lgg201/article/details/5761870
    http://flash520.blog.163.com/blog/static/3441447520101029114016823/
    http://369369.blog.51cto.com/319630/790921

    优点:
    1. mysql的主从复制的主要优点是同步"备份", 在从机上的数据库就相当于一个(基本实时)备份库.
    2. 在主从复制基础上, 通过mysqlproxy可以做到读写分离, 由从机分担一些查询压力.
    3. 做一个双向的主从复制, 两台机器互相为主机从机, 这样, 在任何一个机器的库中写入, 都会"实时"同步到另一台机器, 双向的优点在于当一台主机发生故障时, 另一台主机可以快速的切换过来继续服务.

    步骤:
    1. 在两台机器上分别添加一个用于从机访问的帐号, 赋予REPLICATION SLAVE权限.
    #GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '000000';
    为slave用户赋予任何数据库中任何表上的REPLICATION SLAVE权限, 此用户可以在网络任意位置访问, 访问时以密码slave标记.
    为了安全,可以指定IP地址,如下:
    第一台服务器(IP: 192.168.1.201)运行:
    GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.1.202' IDENTIFIED BY '000000';
    第一台服务器(IP: 192.168.1.202)运行:
    GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.1.201' IDENTIFIED BY '000000';

     
    2.修改配置文件,配置服务器编号, 开启bin-log
    当使用的是ubuntu的时候, 需要注意一点, /etc/mysql/my.cnf配置文件下的bind-address = 127.0.0.1这一行需要注释, 不然从机在请求时是连接不到的.
    编辑/etc/my.cnf
    找到[mysqld]这个标签,
    在它的下面有两行
    #server-id               = 201 ##或者202
    #log_bin                 = mysql-bin.log
    打开这两行的注释, 注意这里的server-id是服务器编号, 所以, 两台服务器上的值要设置的不一样. 比如1和2,最好用IP地址最后一段标识。

     
    3. 使server-id和log-bin的配置修改生效:
    sudo /etc/init.d/mysqld restart


    4. 将两台数据库服务器的mysql都锁定,【非常重要】.
    在mysql命令模式下:
    FLUSH TABLES WITH READ LOCK;  ##这个一定要先执锁定行后,才能够用show master status;查看状态。
    SHOW MASTER STATUS;  ##前面已经查看过了。
    此时请保证执行这两条命令的mysql控制台不要退出,【非常重要】.
    然后进mysql控制台,分别产看相关信息
    在201服务器上如下:
    mysql> show master status;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000001 |      237 |              |                  |
    +------------------+----------+--------------+------------------+
    1 row in set (0.00 sec)
    mysql>
    在202服务器上如下:
    mysql> show master status;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000001 |      237 |              |                  |
    +------------------+----------+--------------+------------------+
    1 row in set (0.00 sec)
    mysql>
     

    5. 分别重新打开一个mysql控台台(重要), 配置主机
    CHANGE MASTER TO
    MASTER_HOST = 'host', #另一台机器的地址
    MASTER_PORT = 3306, #另一台机器的端口
    MASTER_USER = 'slave',#另一台机器上第一步分配的用户名
    MASTER_PASSWORD = '000000', #另一台机器上第一步分配的密码
    MASTER_LOG_FILE = 'mysql-bin.000001',#另一台机器上执行SHOW MASTER STATUS得到的文件名
    MASTER_LOG_POS = 237; #另一台机器上执行SHOW MASTER STATUS得到的偏移量
    我分别在新打开的两个mysql>中执行如下:
    change master to master_host='192.168.1.202',master_user='slave',master_password='000000',master_log_file='mysql-bin.000001',master_log_pos=237;

    change master to master_host='192.168.1.201',master_user='slave',master_password='000000',master_log_file='mysql-bin.000001',master_log_pos=237;


    6. 开启同步
    START SLAVE;


    7. 验证正确性
    SHOW SLAVE STATUS G;
    如果返回的结果第一列是Waiting for master to send event或者Queueing就说明配置是正确的, 当然, 还可能会有其他的信息也是正确的, 只不过我这里没有收集到...呵呵
    如下:
    mysql> SHOW SLAVE STATUS G;
    *************************** 1. row ***************************
                 Slave_IO_State: Waiting for master to send event
                    Master_Host: 192.168.1.202
                    Master_User: slave
                    Master_Port: 3306
                  Connect_Retry: 60
                Master_Log_File: mysql-bin.000001
            Read_Master_Log_Pos: 237
                 Relay_Log_File: mysqld-relay-bin.000002
                  Relay_Log_Pos: 235
          Relay_Master_Log_File: mysql-bin.000001
               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: 237
                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.00 sec)

    ERROR:
    No query specified

    mysql>

    验证,略

  • 相关阅读:
    OSPF
    【今日CS 视觉论文速览】 24 Jan 2019
    【今日CS 视觉论文速览】Wed, 23 Jan 2019
    【今日CS 视觉论文速览】 21 Jan 2019
    【Processing学习笔记】安装与入门
    【今日CS 视觉论文速览】Part2, 18 Jan 2019
    【今日CS 视觉论文速览】Fri, 18 Jan 2019
    【今日CS 视觉论文速览】Thu, 17 Jan 2019
    【今日CS 视觉论文速览】Part2, 16 Jan 2019
    【今日CS 视觉论文速览】Wed, 16 Jan 2019
  • 原文地址:https://www.cnblogs.com/voiphudong/p/3319934.html
Copyright © 2011-2022 走看看