MySql 主从复制

一、环境准备

  系统:CentOS 6.5

  防火墙已关闭:service iptables stop

  MySql:已安装配置MySql 具体方法:MySQL手动安装方法:点击查看

  主从服务器:     

    192.168.244.11 node1 主
    192.168.244.12 node2 从

二、配置主 从服务器的MySql配置文件

  1、主节点   

$ vim /etc/my.cnf
[mysqld]
#设置不同的id 主节点和从节点的不能一样
server-id=11
#启用二进制日志(主节点必须,从节点非必须)
log-bin=master-bin
sync_binlog=1
#注意:下面这个参数需要修改为服务器内存的70%左右
innodb_buffer_pool_size= 512M
innodb_flush_log_at_trx_commit=1
sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_AUTO_VALUE_ON_ZERO
#设置大小写不敏感
lower_case_table_names=1
log_bin_trust_function_creators=1
#不需要同步的库
replicate-ignore-db=mysql,information_schema,db3
#需要记录二进制日志的数据库
binlog-do-db=db1,db2
#不需要记录日志的数据库
binlog-ignore-db=mysql
#需要同步的数据库
replicate-do-db=db1
#默认值3600s
slave-net-timeout=60

  

  2、从节点

$ vim /etc/my.cnf
[mysqld]
#设置不同的id 主节点和从节点的不能一样
server-id=12
#启用二进制日志(主节点必须,从节点非必须)
log-bin=master-bin
sync_binlog=1
#注意:下面这个参数需要修改为服务器内存的70%左右
innodb_buffer_pool_size= 512M
innodb_flush_log_at_trx_commit=1
sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_AUTO_VALUE_ON_ZERO
#设置大小写不敏感
lower_case_table_names=1
log_bin_trust_function_creators=1
#不需要同步的库
replicate-ignore-db=mysql,information_schema,db3
#需要记录二进制日志的数据库
binlog-do-db=db1,db2
#不需要记录日志的数据库
binlog-ignore-db=mysql
#需要同步的数据库
replicate-do-db=db1
#默认值3600s
slave-net-timeout=60

  配置完成以后重启两台节点的MySql 

  binlog-do-db=mysql1 #需要备份的数据库名,如果备份多个数据库,重复设置这个选项 即可
  binlog-ignore-db=mysql2 #不需要备份的数据库名,如果备份多个数据库,重复设置这 个选项即可
  log-slave-updates=1 #这个参数一定要加上,否则不会给更新的记录些到二进制文件 里
  slave-skip-errors=1 #是跳过错误,继续执行复制操作(可选)

 

三、指定同步位置

  1、首先分别在主节点和从节点上锁定表

mysql> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)
mysql> show master status ;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 |      106 | db1          | mysql            |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

  记录在上面查询状态中的File和Position

  2、然后在主节点和从节点上指定同步位置 

mysql> change master to master_host='192.168.244.11',master_user='root',master_password='111111',master_log_file='master-bin.000
001',master_log_pos=106;Query OK, 0 rows affected (0.04 sec)

  3、解锁主从节点  

mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

  4、启动从节点并查看从节点的状态 

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.244.11
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000001
          Read_Master_Log_Pos: 106
               Relay_Log_File: mysqld-relay-bin.000002
                Relay_Log_Pos: 252
        Relay_Master_Log_File: master-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: db1
          Replicate_Ignore_DB: mysql,information_schema,db3
# 如果  Slave_IO_Running 和 Slave_SQL_Running状态都是Yes那说明配置成功了

   注:要同步的数据库必须在从节点上存在!

四、牛刀小试

  在主节点上插入一条数据以后,再到从节点上查看就会发现数据已经同步到了节点从节点上。

-- 主节点
mysql> insert into tb_test values(1,'tom');
Query OK, 1 row affected (0.01 sec)

mysql> select * from tb_test;
+------+------+
| id   | name |
+------+------+
|    1 | tom  |
+------+------+
1 row in set (0.00 sec)

-- 从节点
mysql> select * from tb_test;
+------+------+
| id   | name |
+------+------+
|    1 | tom  |
+------+------+
1 row in set (0.00 sec)

  而没有设置同步的数据库,则没有同步数据。

  

posted @ 2016-09-21 18:20  Bodi  阅读(635)  评论(0编辑  收藏  举报