MySQL 主从又叫做 Replication、AB 复制。
简单讲就是 A 和 B 两台机器做主从后,在 A 上写数据,另外一台 B 也会跟着写数据,两者数据实时同步的。
MySQL 主从是基于 binlog 的,主上须开启 binlog 才能进行主从。
主从过程大致有 3 个步骤:
1)主将更改操作记录到 binlog 里
2)从将主的 binlog 事件(sql 语句)同步到从本机上并记录在 relaylog里中继日志
3)从根据 relaylog 里面的 sql 语句按顺序执行
MySQL 主从原理图
⚫ 主服务器上有一个 log dump 线程,用来和从的 I/O 线程传递 binlog;
⚫ 从服务器上有两个线程,其中 I/O 线程用来同步主的 binlog 并生成
relaylog,另外一个 SQL 线程用来把 relaylog 里面的 sql 语句落地。
MySQL主从配置
主配置 关闭防火墙 和selinux 安全机制
vim /etc/my.cnf 编辑配置文件
log_bin=linux1
vim /etc/init.d/mysqld restart 重新启动
可用使用ll查看/data/mysql是否出现新的文件
备份mysql库(加入环境变量)
vim /etc/profile
export PATH=$PATH:/usr/local/mysql/bin
# source /etc/profile
mysql -uroot mysql >/tmp/mysql.sql
创建一个库用于保存数据 create database kei;
可用show databases;查看是否创建成功
恢复库 将mysql恢复成新建的库,作为测试数据
mysql -uroot mysql </tmp/mysql.sock
进入数据库(默认密码为空)
mysql -uroot
grant replication slave on . to ‘repl’ @192.168.150.149 identified by ‘123456’;
创建用作同步数据的用户并赋予权限,IP地址为从节点的地址(replication是MySQL非常出色的一个功能,该功能将一个MySQL实例中的数据复制到另一个MySQL实例中
flush tables with read lock;
将表锁住,使表内数据保持不变
show master status;
显示主机状态
从配置 关闭防火墙和selinux安全机制
在主上将文件拷贝到从上,并在从上查看文件大小是否一致
scp /tmp/mysql.sql root@192.168.150.149:/tmp/
创建一个和主一样的数据库
create database kei;
将拷贝的文件 恢复到库中
mysql -uroot kei < /tmp/mysql.sql
进入数据库
mysql -uroot
stop slave;
change master to master_host='192.168.150.144',master_user='repl',master_password='123456',master_log_file='linux1.000002',master_log_pos=658720; 为show master status;中的大小
start slave
show slave status\G
在主上执行解锁表 unlock tables;
检查主从配置是否正常
主、从同时操作
mysql> use kei;
mysql> show tables;
mysql> select count(*) from db;
主上操作,删除数据
mysql> truncate table db;
mysql> select count(*) from db;
从上查看数据
mysql> select count(*) from db;
也可drop table尝试看看
几个配置参数
主服务器上
从服务器上