17.1 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语句落地。
用处:1.数据的备份 2.读时从从机上读减轻主的压力。
MySQL主从原理

第十七章 MySQL主从配置_第1张图片


17.2准备工作
192.168.188.128 (主)和129 (从)都安装mysql,并启动起来。

17.3 配置主
1)主从配置--主上操作
修改my.cnf,增加server-id=128和log_bin=aminglinux1
logbin 定义是前缀
修改完配置文件后,启动或者重启mysqld服务
/etc/init.d/mysqld restart
ls /data/mysql/ 会发现生成了aminglinux1前缀的文件。

把mysql库备份并恢复成aming库,作为测试数据,使用密码aminglinux
mysqldump -uroot -paminglinux mysql > /tmp/mysql.sql
创建一个新的库aming
mysql -uroot -paminglinux -e "create database aming"
j将备份的库恢复到aming
mysql -uroot -paminglinux aming < /tmp/mysql.sql
进入数据库 aming, 创建用作同步数据的用户/密码
mysql -uroot -paminglinux aming
grant replication slave on . to 'repl'@192.168.188.129 identified by '1122334455';
锁一下表,不让他更改
flush tables with read lock;
记住它的位置和binlog
show master status;
再做几个备份
mysqldump -uroot -paminglinux mysql2 > /tmp/my2.sql
mysqldump -uroot -paminglinux zrlog> /tmp/zrlog.sql

17.4 配置从
1)主从配置--从上操作
安装mysql
查看my.cnf,配置server-id=129,要求和主不一样,log_bin不用配置了。
修改完配置文件后,启动或者重启mysqld服务
把主上的/tmp/.sql拷贝到从上,
scp 192.168.188.128:/tmp/
sql /tmp/
输入密码
登陆数据库,并创建aming库,zrlog库,my2库,然后
mysql -uroot

create database aming;
create database zrlog;
create database my2;
quit
做一个数据库的恢复
mysql -uroot aming< /tmp/mysql.sql
mysql -uroot zrlog < /tmp/zrlog.sql
mysql -uroot my2 < /tmp/my2.sql
现在 128和129上的数据库内容一致了。

2)实现主从,在从上
mysql -uroot

stop slave;
change master to master_host='192.168.188.128', master_user='repl', master_password='1122334455', master_log_file='aminglinux1.000002', master_log_pos=1326644;

第十七章 MySQL主从配置_第2张图片
启动
start slave;
show slave status\G

第十七章 MySQL主从配置_第3张图片

3)在主上操作
mysql -uroot -paminglinux aming
还要到主上执行

unlock tables;

17.5 测试主从同步
几个配置参数
主服务器上
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=

测试主从
主上查看aming库的user表的行数,
mysql -uroot -paminglinux aming
select count() from user;
truncate table user; //清空表
select
from user; //为0,无内容

到从上 查看aming库的user表的行数,
mysql -uroot aming
select count(*) from user;

主上继续drop table user;
从上查看user表
发现从上也没有了user。