一.介绍
Mysql的主从又叫AB复制。就是两台机器做主以后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步。
Mysql主从是基于binlog的,主上须开启binlog才能进行主从。
主从过程大概有三个步骤:
1)主将更改操作记录到binlog里
2)从将主的binlog事件(sql语句)同步到从本机上并记录在relaylog里中继日志
3)从根据relaylog里面的sql语句按顺序执行
二.原理
主服务器上有一个log dump线程,用来和从的I/o线程传递binlog;
从服务器上有两个线程,其中I/o线程用来同步主的binlog并生成
Relaylog,另外一个sql线程用来吧relaylog里面的sql语句落地
三、在两台机器上安装部署mysql(前面都有介绍)若是原来有mysql则重新安装或者换个名字
启动主上面的 /etc/init.d/mysqld start(如果没启动就排错,查看mysql.err)
四、配置mysql主从同步
1、主配置
基础配置:
vi /etc/my.cnf //增加server-id=130和log_bin=linux1
重启mysqld服务:
/etc/init.d/mysqld restart
备份mysql库(加入环境变量)
export PATH=$PATH:/usr/local/mysql/bin/
mysqldump -uroot mysql> /tmp/mysql.sql
创建一个库保存数据
mysql -uroot -e “create database kei”
将mysql库恢复成新建的库,作为测试数据数据库配置
mysql -uroot kei < /tmp/mysql.sql
进入数据库
mysql -uroot
创建用作同步数据的用户并赋予权限
>grant replication slave on *.* to ‘repl’ @192.168.134.130 identified by ‘123456’;
将表锁住,保持表内数据不变
>flush tables with read lock;
显示主机状态
>show master status;
2.从配置
基础配置 编辑配置文件vi /etc/my.cnf配置server-id=130和主的不一样
重启mysqld服务
/etc/init.d/mysqld restart
在主上将文件拷贝到从上,并在从上查看文件大小是否一致
scp /tmp/mysql.sql root@192.168.134.130:/tmp/
创建一个和主一样的库
mysql -uroot -e “create batabase sxt ”
将文件内容导入库 数据库配置
mysql -uroot kei < /tmp/mysql.sql
进入数据库
mysql -uroot
>stop slave;
> change master to master_host=’’,master_user=’repl’,master_password=’’,master_log_file=’’,master_log_pos=xx;
>change master to master_host=’192.168.134.130’,master_user=’repl’,master_password=’123456’,master_log_file=’linux1.000001’,master_log_pos=698861;
>start slave;
>show slave statusG;
在主上执行解锁表
>unlock tables;
五、主从同步及相关配置参数
主从同步验证:
从服务器上操作并执行命令(防火墙关闭)
>show slave statusG;
若出现yes,即表示主从配置正常
主服务器主要配置参数如下:
binlog-do-db= //仅同步指定的库
Binlog-ignore-db= //忽略指定库
从服务器主要配置参数如下:
replicate_do_db=
replicate_ignore_db=
replicate_do_table=
replicate_ignore_table=
replicate_wild_do_table= //如test.%,支持通配符%
replicate_wild_ignore_table=
六、测试主从
1.主服务器上
在主上进入数据库
mysql -uroot -p 密码
>select count(*) from db;
>truncate table db; //删表
2.从服务器上
再从上进入数据库
mysql -uroot sxt
>select count(*) from db;