MySQL主从复制

MySQL主从复制

MySQL主从复制主从复制实现原理操作步骤1.准备两台装有MySQL数据库的服务器2.修改主库的MySQL配置文件3.查看二进制日志是否开启4.主节点二进制日志列表5.在主库上创建复制权限的用户6.备份主库并导入从库7.从库修改文件8.在从库配置访问主库的参数信息9.从库开启IO和SQL线程10.查看同步的状态11.报错解决方法

主从复制实现原理

1.master将主库的所有改变的操作记录到二进制日志之中(binary log)

2.slave的io进程将master进程中的二进制日志拷贝到他自己的中继日志当中(relay log),

3.slave的sql线程解析中继日志文件然后再从库执行,保持与主库一致

图解:

操作步骤

 

1.准备两台装有MySQL数据库的服务器

2.修改主库的MySQL配置文件

 #添加三段配置
 cat >> /etc/my.cnf <<EOF
 ​
 log-bin=mysql-bin
 binlog_format=mixed
 server-id =1
 EOF
 ​
 ​
 #重启服务
 systemctl restart mysqld

3.查看二进制日志是否开启

登录到数据库查看

 mysql> show global variables like '%log%';

 

4.主节点二进制日志列表

记录这里最后一行输出的值

 mysql> show master logs;
 +------------------+-----------+
 | Log_name         | File_size |
 +------------------+-----------+
 | mysql-bin.000001 |       154 |
 +------------------+-----------+
 1 row in set (0.00 sec)

5.在主库上创建复制权限的用户

 #这里用户的网段repl@'10.0.0.%'根据自己的ip来修改
 mysql> grant replication slave on *.* to repl@'10.0.0.%' identified by 'Yj123.com';
 Query OK, 0 rows affected, 1 warning (0.00 sec)
 ​
 #为了避免重启服务,刷新一下
 flush privileges;

6.备份主库并导入从库

 #主库备份
 mysqldump -uroot -pYj123.com -A > all.sql
 ​
 #用rsync或者scp把备份文件传到从库
 ​
 #导入从库
 mysql -uroot -pYj123.com < all.sql

7.从库修改文件

 cat >> /etc/my.cnf << EOF
 ​
 relay-log=relay-log
 relay-log-index=relay-log.index
 server-id=2
 EOF
 ​
 #修改配置文件之后重启服务
 systemctl restart mysqld

8.在从库配置访问主库的参数信息

 添加 主节点主机,访问主节点的用户名及密码,主节点二进制文件信息。
 注意:主节点的二进制文件一定要是二进制列表中的最后一个二进制文件。
 #进入MySQL配置
 CHANGE MASTER TO 
     MASTER_HOST='10.0.0.250',
     MASTER_USER='repl',
     MASTER_PASSWORD='Yj123.com', 
     MASTER_LOG_FILE='mysql-bin.000001',
     MASTER_LOG_POS=154;
 ​
 ​
 #MASTER_HOST主库的ip
 #MASTER_USER授权复制用户名 
 #MASTER_PASSWORD授权用户名的密码
 #MASTER_LOG_FILE查看主节点二进制日志列表Log_name的最后一个
 #MASTER_LOG_POS查看主节点二进制日志列表File_size的最后一个

9.从库开启IO和SQL线程

 mysql> start slave;

10.查看同步的状态

 mysql> show slave status\G;
 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes
 #看到这两个就证明已经开启主从复制了

11.报错解决方法

 --如果查看同步的状态IO进程是NO--
 Slave_IO_Running: No   
 Slave_SQL_Running: Yes
 ​
 #停止I/O线程和SQL线程;
 stop slave;
 ​
 #删除SLAVE数据库的relaylog日志文件,并重新启用新的relaylog文件;
 reset slave;
 ​
 #启动I/O 线程和SQL线程。
 #I/O线程从主库读取bin log,并存储到relay log中继日志文件中。
 #SQL线程读取中继日志,解析后,在从库重放。
 start slave;
 ​
 ​
 ​
 #再进行查看线程状态
 show slave status\G;
 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值