参考
开发环境
第一台机器-Linux-主机名称
版本
CentOS7
CentOS-7-x86_64-DVD-2003.iso
Linux
3.10.0-1127.el7.x86_64
mysql
5.7.16
IP
192.168.241.128
第二台机器-Windows-从机名称
版本
操作系统
Windows 10 X64
mysql
8.0.11
IP
10.98.217.41
复制的基本原理
slave 会从 master 读取 binlog 来 进行数据同步。
MySQL 复制过程分成三步:
1.master 将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log events。
2.slave 将 master 的 binary log events 拷贝到它的中继日志(relay log);
3.slave 重做中继日志中的事件,将改变应用到自己的数据库中。 MySQL 复制是异步的且串行化的。
复制的基本原则
1.每个 slave 只有一个 master
2.每个 slave 只能有一个唯一的服务器 ID
3.每个 master 可以有多个 salve
复制的最大问题
延时
前提条件
(1)mysql 版本一致且后台以服务运行
(2)主从都配置在 [mysqld] 结点下,都是小写
(3)mysql 主从复制起始时,从机不继承主机数据
主机配置
1.修改主节点配置文件-my.cnf
vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin
server-id=1
innodb-file-per-table=ON
skip_name_resolve=ON
2.重启 mysqlsystemctl restart mysqld.service
3.查看日志信息
(1)查看二进制日志是否开启
showglobalvariables like'%log%';
(2)查看主节点二进制日志列表
show master logs;
(3)查看主节点的 server id
showglobalvariables like'%server%';
4.在主节点上创建有复制权限的用户#在主节点创建一个用户 luoma_slave,用于从节点链接主节点时使用,密码为 luoma123456
#%:表示任何机器,也可以指定为从机 IP
grant replication slave,replication client on*.*to'luoma_slave'@'%'identifiedby'luoma123456';
假如执行报下面的错误
>1064-Youhave an errorinyour SQL syntax;check the manual that corresponds to yourMySQLserver versionforthe right syntax tousenear'IDENTIFIED BY 'luoma123456''at line4
>时间:0.001s
这个错误的原因是 mysql8.0 以上版本不支持创建用户和授权同时进行。使用下面的 sql 创建
#在主节点创建一个用户 luoma_slave,用于从节点链接主节点时使用,密码为 luoma123456
CREATE USER'luoma_slave'@'%'IDENTIFIED WITH mysql_native_password BY'luoma123456';
#授权
#ON *.* db.table: 数据库和数据表
#TO user: 要授权的用户
#@ host: % 表示任何主机
GRANT REPLICATION SLAVE ON*.*TO'luoma_slave'@'%';
5.刷新flush privileges;
6.查询 master 的状态show master status;
记录下 File 和 Position 的值
File
Position
Binlog_Do_DB
Binlog_Ignore_DB
Executed_Gtid_Set
mysql-bin.000001
1503
.
记录下 File 和 Position 的值,从机配置会使用到。
主服务器配置完成
注意:确保主服务器的 iptables 没有阻断 3306 的访问端口。
从机配置
1.修改从节点配置文件-my.ini
D:\Program Files\mysql-8.0.11-winx64\my.ini
[mysqld]
server-id=2
log_bin=mysql-bin
2.重启 mysql 服务C:\Windows\system32>net stop mysql
MySQL服务正在停止.
MySQL服务已成功停止。
C:\Windows\system32>net start mysql
MySQL服务正在启动....
MySQL服务已经启动成功。
3.查看从节点日志信息
(1)查看中继日志是否开启
showglobalvariables like'%log%';
(2)查看 server 相关信息
showglobalvariables like'%server%';
4.在从节点配置访问主节点的参数信息
添加 主节点主机,访问主节点的用户名及密码,主节点二进制文件信息。
注意:主节点的二进制文件一定要是二进制列表中的最后一个二进制文件。
语法格式
CHANGE MASTER TO MASTER_HOST='主机 IP',
MASTER_USER='主节点创建的用户名',
MASTER_PASSWORD='主节点创建的密码',
MASTER_LOG_FILE='File 名字',
MASTER_LOG_POS=Position数字;CHANGE MASTER TO
MASTER_HOST='192.168.241.128',
MASTER_USER='luoma_slave',
MASTER_PASSWORD='luoma123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=1503;
5.查看从节点的状态信息SHOW SLAVE STATUS;
因为没有启动从节点的复制线程,IO线程 和 SQL 线程都为 NO
6.启动复制线程
START SLAVE 可以指定线程类型:IO_THREAD,SQL_THREAD, 如果不指定,则两个都启动。
#启动复制线程
start slave;
#立即生效
flush privileges;
#查看从节点的状态信息
SHOW SLAVE STATUS;
下面两个参数都是 Yes,则说明主从配置成功!
至此,mysql 的主从复制配置完成。
如果需要重新配置,需要先停止复制线程
stop slave;
配置完成之后再重新启动。
测试
1.主机创建数据库,创建表,添加记录mysql>create database luoma_test_1;
QueryOK,1row affected(0.05sec)
mysql>create table t1(idint,content varchar(100));
QueryOK,0rows affected(0.13sec)
mysql>insertintot1(id,content)values(1,'luoma1.1');
QueryOK,1row affected(0.05sec)
mysql>insertintot1(id,content)values(2,'luoma1.2');
QueryOK,1row affected(0.34sec)
mysql>select*fromt1;
2.重机刷新数据库