MySQL主从叫作Replication、AB复制。就是A和B两台机器作主从后,在A上写数据,B也会跟着写数据,二者数据实时同步的。mysql
MySQL主从是基于binlog的,主上须开启binlog才能进行主从。主从主要做用:数据备份,负载均衡(读写分离)web
主从配置步骤:sql
1.主将更改操做记录到binlog里。数据库
2.从将主的binlog事件(sql语句)同步到从本机上并记录在relaylog里。vim
3.从根据relaylog里面的sql语句按顺序执行 主上有一个log dump线程,用来和从的I/O线程传递binlog 从上有两个线程,其中I/O线程用来同步主的binlog并生成relaylog,另一个SQL线程用来把relaylog里面的sql语句落地。bash
准备两台机器,配置好基础环境,都安装好mysql并开启mysql服务。服务器
1.修改mysql主配置:负载均衡
vim /etc/my.cnf #添加如下配置:ide
server-id=101 #定义server id ,可随意定义 log_bin=zjy01 #定义binlog的log前缀,可随意定义
重启mysql服务:性能
/etc/init.d/mysqld restart
查看/data/mysql/下是否有对应log_bin定义的前缀文件生成:zjy.000001和zjy.index
2.建立测试所用数据库和数据文件:
从原有的test数据库导出数据:
mysqldump -uroot -p123456 test > /tmp/test.sql
建立新库test2用于测试:
mysql -uroot -p123456 -e “create database test2”
将导出的测试数据test.sql恢复到test2库中:
mysql -uroot -p123456 test2 < /tmp/test.sql
3.建立并设置同步数据用户相关:
建立一个mysql的用户用于数据同步时使用:
mysql -uroot -p123456
mysql> grant replication slave on *.* to 'repl'@'192.168.1.101' identified by '123456'; #repl用户,1.101为从库的IP
锁定数据表
mysql> flush tables with read lock; #暂时中断写入操做,保持此状态进行同步
查看并记住file和position
mysql> show master status; #主从配置时用到
4.备份主库全部数据库:
mysqldump -uroot -p123456 zrlog > /tmp/zrlog.sql
......
1.修改mysql主配置:
vim /etc/my.cnf #添加如下配置:
server-id=102 #与主不同
log_bin不须要配置
重启mysql服务:
/etc/init.d/mysqld restart
2.拷贝主上备份的全部数据库的备份sql文件并恢复:
拷贝备份文件
scp 192.168.1.101:/tmp/*.sql /tmp/
建立对应于主上的全部库
mysql -uroot -p123456 -e “create database test2”
mysql -uroot -p123456 -e “create database test1”
mysql -uroot -p123456 -e “create database zrlog”
......
恢复数据到数据库:
mysql -uroot -p123456 test2< /tmp/test2.sql
mysql -uroot -p123456 zrlog< /tmp/zrlog.sql
......
3.配置从:
mysql -uroot -p123456
mysql> stop slave;
mysql> change master to master_host='192.168.1.101', master_user='repl', master_password='123456', master_log_file='zjy.000001', master_log_pos=542; #1.101为主IP,zjy.000001和542为住配置中第三步show master status;查看出来的file和position字段的内容
mysql> start slave;
查看是否配置主从成功:
mysql> show slave status\G
*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.1.101 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: zjy.000002 Read_Master_Log_Pos: 120 Relay_Log_File: localhost-relay-bin.000005 Relay_Log_Pos: 282 Relay_Master_Log_File: zjy.000002 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table:
主上解锁表:
mysql -uroot -p123456
mysql> unlock tables;
参数介绍:Mysql的my.cnf配置文件中
主服务器: binlog-do-db= #仅同步指定的库 binlog-ignore-db= #忽略指定的库 从服务器: replicate_do_db= #同步指定的库 replicate_ignore_db= #忽略指定的库 replicate_do_table= #同步指定的表 replicate_ignore_table= #忽略指定的表 #建议只使用下面2个语句,使用参数“replicate_wild_”,使匹配更精确,提高使用性能。 replicate_wild_do_table= 如zjy.%,支持通配符 replicate_wild_ignore_table=
主操做:
mysql -utest2
mysql> show tables;
mysql> select count(*) plugin; #查看plugin表有多少行
mysql> truncate table plugin; #清空表里数据
mysql> drop table website; #删除表website
从操做:
mysql -utest2
mysql> select count(*) plugin; #查看plugin表是否已经清空数据
mysql> show tables; #查看website表是否已经不存在
须要从新备份恢复从新配置主从