17.2 准备工作
17.3 配置主
17.4 配置从
17.5 测试主从同步
MySQL主从介绍:
原理图:
简单来讲写入A(主)机器-----A机器从将写入的sql语句同步到从B机器(从)---是通过什么同步的呢?----A机器的log dump线程和B机器的I/0thread线程进行通信---然后同步到B机器生成一个relaylog(中继日志)---relaylog在写入到B机器的数据库上。
准备工作
准备2台虚拟机分别为A和B机器
,A做主
B做从
2台都安装mysql
配置主
1.修改/etc/my.cnf配置文件
log_bin = AAA --定义log_bin后会在mysql目录生成文件(设置主从的关键)
basedir = /usr/local/mysql
datadir = /data/mysql
port = 3306 --定义端口
server_id = 128 --随意定义
socket = /tmp/mysql.sock --定义sock
2.重启mysql服务
/etc/init.d/mysqld restart
3.查看/data/mysql目录 下图就是log_bin生成的文件
4.备份数据库做实验:
mysqldump -uroot -pmysql zrlog > /tmp/zrlog.sql
5.创建用户
grant replication slave on *.* to 'repl'@'192.168.142.130' identified by 'repl'
6.锁定库--暂时不写数据(为了保持主从数据同步一致)
flush tables with read lock;
7.查看master状态
show master status;
配置从
1.vim /etc/my.cnf
只需要修改server-id跟A机器不一样即可(这里我用3307端口)
server-id=130
2.通过scp命令进行数据拷贝到本机
scp 192.168.142.128:/tmp/*.sql /tmp
输入密码
3.创建库
create databse zrlog; ---创建库
mysql-uroot zrlog</tmp/zrlog.sql
4.B机器设置(从)
- stop slave
- master_host='192.168.142.128',master_user='repl',master_password='repl',master_log_file='AAA.000001',master_log_pos=332; //host为A机器IP(主) user为账户 passwd密码
- log_file和log_pos 就是图下这2项数据
- B机器执行start slave
- A机器解锁数据库 unlock tables
5.查看主从同步状态:
show slave status\G;
重点关注:
----2项一定要为yes
----然后为错误日志
几个配置参数在主从my.cnf设置
主:可支持逗号分隔设置多个
binlog-do-db= //仅同步指定的库
binlog-ignore-db= //忽略指定库
从:
replicate_do_db= //仅同步指定的库
replicate_ignore_db= //忽略指定库
replicate_do_table= //仅同步指定的表(慎用) --假设表示test.xx 带结尾的也会忽略导致库不完整,so,建议用wild下面2个支持通配。
replicate_ignore_table= //忽略指定的表(慎用)
replicate_wild_do_table= //同步指定的表支持通配(如test.%)
replicate_wild_ignore_table= //忽略指定的表支持通配(如test.%)
测试主从同步
1.在A机器zrlog创建一个表
create table t3 (`id` int(4), `name` char(40)); ---创建表
show tables; --查看表
如图多了个t3
2.在B机器查看是否同步
use zrlog --切换表
show tables; --查看表
可以看图B机器也同步了t3的表