主从同步原理:
- 主数据库中对数据的各种操作,都会自动写入 Binary Log 中;
- 从数据库会在一定时间间隔内探测主数据库的 Binary Log 是否发生变化,如有变化,则开始一个 IO 线程,请求访问主数据库的二进制日志文件并保存到从数据库的中继日志(Relay Log)中;
- 从数据库启动 SQL 线程从中继日志中读取二进制日志,在本地重放,使其数据与主数据库保持一致,完成后相关线程会陷入休眠,等待下一次唤醒。
设置主从同步,还有以下几个前提:
- 主库和从库的版本保持一致;
- 主从同步集群中每个数据库实例的 server-id 值不能重复;
首先准备至少两台服务器,并装好mysql,安装mysql参考链接:
内网离线环境安装mysql
*记得配置下mysql可以远程连接:
MySQL配置远程连接
are you ready?
go
开始配置
- 先在主库创建一个同步账户;
比如我这里创建 async用户,任意ip可以访问,密码123456
> CREATE USER 'async'@'%' IDENTIFIED BY '123456';
> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'async'@'%';
创建用户详解
MySQL 8 创建用户详解
- 连接上主服务器 ,从服务器 更改mysql配置文件
vi /etc/my.cnf
#主节点
#添加如下配置
server-id = 1
#这个是指定binlog名字
log-bin = master-bin
#从节点
server-id = 2
#注:有多少个从节点就给多少给从节点配置上 server-id ,这个不能重复
然后重启mysql服务
3.连接上主节点mysql
> #重置偏移量如果不重置,从节点也会创建copy用户
> reset master;
> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 | 107 | | |
+-------------------+----------+--------------+------------------+
获取到
二进制文件名字 : master-bin.000001
Position : 157
这里获取的信息之后会用到
- 注册从节点
从节点连接主节点信息:
master_host : 主节点主机名
master_user : 主从同步账户
master_port : 主节点mysql服务的端口号
master_password : 主从同步账户的密码
master_log_file : 主节点二进制文件名字
master_log_pos : 主节点获取的Position值
> #停止连接
> stop slave;
> reset slave;
>
> CHANGE MASTER TO
> MASTER_HOST='192.168.30.160',
> MASTER_USER='async',
> MASTER_PORT=3306,
> MASTER_PASSWORD='123456',
> MASTER_LOG_FILE='master-bin.000001',
> MASTER_LOG_POS=107;
>
> #开始
> start slave;
>
> #查看主从连接信息
> show slave status\G;
注意:
Slave_IO_Running : Yes
Slave_SQL_Running : Yes
表示连接成功
Master_Log_File: xxx
Relay_Master_Log_File : xxxx
这两个binlog是否一致,并且与主节点的binlog日志一样
如果没有连上
其中Last_error: xxxxx
可以查看错误信息,根据错误信息去更改
没有问题就可以在主节点中创建数据验证。