一、MySQL主从介绍
MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的 MySQL主从是基于binlog的,主上须开启binlog才能进行主从。 主从过程大致有3个步骤
1)主将更改操作记录到binlog里
2)从将主的binlog事件(sql语句)同步到从本机上并记录在relaylog里
3)从根据relaylog里面的sql语句按顺序执行
主上有一个log dump线程,用来和从的I/O线程传递binlog
从上有两个线程,其中I/O线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的sql语句落地
MySQL主从原理图
三、配置主
安装mysql
修改vi /etc/my.cnf,增加server- id = 101和log_bin = davery1
报错,需要把 /data/mysql 和/usr/local/mysql 的数组数主都改一下
cd /usr/local/mysql
chowen -R mysql.mysql .
chown -R mysql.mysql /data/mysql
修改完配置文件后,启动或者重启mysqld服务
/etc/init.d/mysqld restart
cd /data/mysql 这时目录里边会生成很多新的文件,index文件必须一定要有在能完成主从配置
测试
把zrlog备份到 /tmp/zrlog.sql
创建一个新的库test2,并把/tmp/zrlog.sql这个库回复到test2,后边参考的库就是test2
[root@davery mysql]# /usr/local/mysql/bin/mysql -uroot -pmimA123 -e "create database test2"
/usr/local/mysql/bin/mysql -uroot -pmimA123 test2 < /tmp/zrlog.sql
查看两个库test2 zrlog 大小一致
创建用作同步数据的用户,先登陆mysql
[root@davery mysql]# /usr/local/mysql/bin/mysql -uroot -pmimA123
mysql> grant replication slave on *.* to 'repl'@'192.168.1.106' identified by 'mimA123'; 指定从ip,以密码登陆
mysql> flush tables with read lock;把表锁定
show master status;使用到如下两个
davery1.000002
10557
然后退出
数据备份,这时候主就配置好了
四、配置从
安装mysql
查看my.cnf,配置server-id = 106,要求和主不一样
修改完配置文件后,启动或者重启mysqld服务
[root@davery01 mysql]# /etc/init.d/mysqld restart
把主上test2库同步到从上
scp 192.168.1.101:/tmp/*.sql /tmp/
可以先创建test2库,然后把主上的/tmp/mysql.sql拷贝到从上,然后导入test2库,为防止错乱,两边都需要有同样的数据库名。
/usr/local/mysql/bin/mysql -uroot
mysql> create database davery;
mysql> create database zrlog;
mysql> create database test2;
可以看到数据已经一致了
从备份原/tmp/*.sql 还原到对应的库里边
[root@davery01 ~]# /usr/local/mysql/bin/mysql -uroot zrlog < /tmp/zrlog.sql
[root@davery01 ~]# [root@davery01 ~]# /usr/local/mysql/bin/mysql -uroot test2 < /tmp/zrlog.sql[root@davery01 ~]# [root@davery01 ~]# /usr/local/mysql/bin/mysql -uroot mysql < /tmp/my2.sql[root@davery01 ~]# [root@davery01 ~]# [root@davery01 ~]# ls /data/mysql然后登陆从,并关闭从
stop slave;
mysql> change master to master_host='192.168.1.101', master_user='repl', master_password='mimA123', master_log_file=='davery1.000002', master_log_pos=10557;
start slave;
show slave status\G
出现如下内容说明主从配置成功啦!
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.101 Master_User: repl Master_Port: 3306 Connect_Retry: 60Master_Log_File: davery1.000002 Read_Master_Log_Pos: 10557 Relay_Log_File: davery01-relay-bin.000002 Relay_Log_Pos: 281 Relay_Master_Log_File: davery1.000002Slave_IO_Running: Yes Slave_SQL_Running: Yes 这两行说明主从在运行。
还要到主上执行 unlock tables 这一步也不能忘记
这时候主从配置就真的配置完成了
五、测试主从同步
从上执行mysql -uroot
show slave stauts\G
看是否有
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
还需关注
Seconds_Behind_Master: 0 //为主从延迟的时间
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
配置参数
vim /etc/my.cnf
主服务器上 binlog-do-db= //仅同步指定的库
binlog-ignore-db= //忽略指定库
从服务器上
replicate_do_db=
replicate_ignore_db= 忽略库
replicate_do_table=
replicate_ignore_table= 忽略表
replicate_wild_do_table= //如aming.%, 支持通配符%
replicate_wild_ignore_table=
测试主从
主上
/usr/local/mysql/bin/mysql -uroot -pmimA123 登陆
查看都有哪些库
使用test2库
use test2;
select count(*) from user; 查看user表有多少行
可看到一行
truncate table ;
到从上
/usr/local/mysql/bin/mysql -uroot
select count(*) from user; 也是一行
主上继续drop table user;