天天看点

mysql主从复制(互为主从)

步骤:

1. 在两台机器上分别添加一个用于从机访问的帐号, 赋予REPLICATION SLAVE权限.

为slave用户赋予任何数据库中任何表上的REPLICATION SLAVE权限, 此用户可以在网络任意位置访问, 访问时以密码slave标记.

为了安全,可以指定IP地址,如下:

第一台服务器(IP1)运行:

GRANT REPLICATION SLAVE ON *.* TO 'slave'@ 'IP2' IDENTIFIED BY 'test';

第一台服务器(IP2)运行:

GRANT REPLICATION SLAVE ON *.* TO 'slave'@'IP1' IDENTIFIED BY 'test';

2.修改配置文件,配置服务器编号, 开启bin-log

当使用的是ubuntu的时候, 需要注意一点, /etc/ my.cnf配置文件下的bind-address= 127.0.0.1这一行需要注释, 不然从机在请求时是连接不到的.

编辑/etc/my.cnf

找到[mysqld]这个标签, 

在它的下面有三行

mysql主从复制(互为主从)

打开这两行的注释, 注意这里的server-id是服务器编号, 所以, 两台服务器上的值要设置的不一样. 比如1和2,最好用IP地址最后一段标识。

3. 使server-id和log-bin的配置修改生效:

sudo /etc/init.d/mysqld restart

4. 将两台数据库服务器的mysql都锁定,【非常重要】.

在mysql命令模式下: 

SLAVE STOP

FLUSH TABLES WITH READ LOCK;  ##这个一定要先执锁定行后,才能够用show master status;查看状态。

SHOW MASTER STATUS;  ##前面已经查看过了。

此时请保证执行这两条命令的mysql控制台不要退出,【非常重要】.

然后进mysql控制台,分别产看相关信息

在IP2服务器上如下:

mysql主从复制(互为主从)

在IP1服务器上如下:

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>中执行如下:

服务器IP1:

change master to master_host='ip2',master_user='slave',master_password='test',master_log_file='mysql-bin.000005',master_log_pos=106;

服务器IP2

change master to master_host='ip1',master_user='slave',master_password='test',master_log_file='mysql-bin.000005',master_log_pos=106;

6. 开启同步

START SLAVE;

MySQL同步故障:"Slave_SQL_Running:No" 两种解决办法

7. 验证正确性

SHOW SLAVE STATUS \G;

如果返回的结果第一列是Waiting for master to send event或者Queueing

 Slave_IO_Running:Yes

Slave_SQL_Running: Yes

就说明配置是正确的, 当然, 还可能会有其他的信息也是正确的, 只不过我这里没有收集到...呵呵

如下:

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

8、查看状态:

show processlist;

每次重启mysql需要update log,所以需要从第三步骤开启;

继续阅读