复制的基本原理
slave会从master读取binlog来进行数据同步
三步骤+原理图
MySQL复制过程分成三步:
- master将改变记录到二进制日志(binary log) 。这些记录过程叫做二进制日志事件,binary log events;
- slave将master的binary log events拷贝到它的中继日志(relay log) ;
- slave重做中继日志中的事件,将改变应用到自己的数据库中。MySQL复制是异步的且串行化的;
复制的基本原则
- 每个slave只有一个master;
- 每个slave只能有一个唯一的服务器ID;
- 每个master可以有多个slave;
复制的最大问题
一主一从常见配置
mysql版本一致且后台以服务运行
验证网络是否互通
# 查看ip地址,192.168.75.100(主)192.168.75.101(从)
ifconfig
# 验证
ping 192.168.75.101
Ctrl+C退出
主机修改my.cnf配置文件(linux)
主从都配置在[mysqld]结点下,都是小写;
# 主服务器唯一ID【必须】
server-id=1
# 允许任何端口访问【必须】
bind-address = 0.0.0.0
# 启用二进制日志【必须】
log-bin=/mysqlbin
# 启用错误日志【可选】
log-err=/mysqlerr
# 根目录【可选】
basedir=/
# 临时目录【可选】
tmpdir=/
# 数据目录【可选】
datadir=/
# 主机,读写都可以
read-only=0
# 设置不要复制的数据库【可选】
db-ignore-binlog=数据库名
# 设置需要复制的数据库【可选】
binlog-do-db=数据库名
# 重启服务【必须】
systemctl start mysqld
从机修改my.cnf配置文件(linux)
# 主服务器唯一ID【必须】
server_id=2
# 允许任何端口访问【必须】
bind-address = 0.0.0.0
# 启用二进制日志【可选】
log-bin=/mysqlbin
# 重启服务【必须】
systemctl start mysqld
# 查看server_id
show variables like '%server_id%';
主机从机都关闭防火墙
关闭虚拟机linux|防火墙:service iptables stop 或 systemctl disable firewalld;没安装就算了!
在 主机上建立帐户并授权slave
#GRANT REPLICATION SLAVE ON *.* TO '用户名'@'从机器数据库IP' IDENTIFIED BY '密码';
GRANT REPLICATION SLAVE ON *.* TO 'GodHLinux'@'192.168.75.101' IDENTIFIED BY 'GodH233593@';
#刷新
FLUSH PRIVILEGES;
#查看mysql用户表
SELECT `user`,`host` FROM `user`;
查询master的状态
#查看主机状态
SHOW MASTER STATUS;
记录下File和Position的值
mysql-bin.000042,879
执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化;
在Linux从机上配置需要复制的主机
#停止服务复制(3021错误)
STOP SLAVE;
#CHANGE MASTER TO MASTER_HOST='主机IP',MASTER_USER='zhangsan',MASTER_PASSWORD='123456',MASTER_LOG_FILE='File名字',MASTER_LOG_POS=Position数字;
CHANGE MASTER TO MASTER_HOST='192.168.75.100',MASTER_USER='GodHLinux',MASTER_PASSWORD='GodH233593@',MASTER_LOG_FILE='mysql-bin.000042',MASTER_LOG_POS=879;
#启动从服务器复制功能
START SLAVE;
#查看是否配置成功
SHOW SLAVE STATUS;
两个参数都是Yes,则说明主从配置成功!
Slave_IO_Running:Yes;;
Slave_SQL_Running:Yes;
测试
#主
create database mydb58;
use mydb58;
insert into dog values(1,'ww1');
select * from dog;
#从
use mydb58;
select * from dog;
如何停止从服务复制功能
#停止服务复制(3021错误)
STOP SLAVE;