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)
而没有设置同步的数据库,则没有同步数据。