作者:jawshan212 | 来源:互联网 | 2023-05-18 04:50
Mysql主从复制(master-slave)实际操作案例-在这一章节里,我们来了解下如何在Mysql中进行用户授权及主从复制 这里先来了解下Mysql主从复制的优点: 1、如果主
在这一章节里, 我们来了解下如何在 Mysql 中进行用户授权及主从复制
这里先来了解下 Mysql 主从复制的优点:
1、 如果主服务器出现问题, 可以快速切换到从服务器提供的服务
2、 可以在从服务器上执行查询操作, 降低主服务器的访问压力
3、 可以在从服务器上执行备份, 以避免备份期间影响主服务器的服务
注意一般只有更新不频繁的数据或者对实时性要求不高的数据可以通过从服务器查询, 实时性要求高的数据仍然需要从主数据库获得
在这里我们首先得完成用户授权, 目的是为了给从服务器有足够的权限来远程登入到主服务器的 Mysql
在这里我假设
主服务器的 IP 为: 192.168.10.1
从服务器的 IP 为: 192.168.10.2
Mysql grant 用户授权
查看 Mysql 的用户表
结果如下:
从如上表中看以看出 root 用户只能从本机登入 Mysql, 也就是来自 localhost 或者 127.0.0.1
现在来通过 grant 命令来添加授权用户
通过了 grant 命令给予了来自 192.168.10.2 的用户 user1 权限, 允许其远程登录, 如下:
此时就可以在 192.168.10.2 的机器上访问 10.1 的 Mysql 了, 如下:
Mysql bin-log 日志
开启 bin-log 二进制日志, 它保存了所有增删改的操作, 以便于数据恢复或同步
修改主服务器 mysql 配置文件:
添加完成后重启 Mysql 服务
现在你可以通过如下命令来查看 bin-log 日志是否成功开启
如果显示为 ON, 那么就可以在 /var/log/mysql/ 文件夹看到 mysql-bin.000001 二进制文件
关于 bin-log 日志的相关操作:
此时就会多一个最新的 bin-log 日志
查看最后一个 bin-log 日志, 如下:
查看所有 bin-log 日志, 如下:
清空所有 bin-log 日志
查看 bin-log 日志内容
Mysql 主从复制 - 数据同步
到这一步的时候首先确保 Mysql 用户授权已经完成以及 Mysql bin-log 日志已经成功开启
并确保每台服务器的 server-id 是唯一的
再次修改主服务器(192.168.10.1)的 mysql 配置文件:
到这里, 主服务器的配置已经完成, 很简单
这次我们主要做的是让从服务器同步主服务器的数据, 同步的是将来所有对主服务做的增删改操作, 但是现有主服务器中的大量数据得先手动同步到从服务器, 操作如下:
完成后, 现在我们到从服务器 (192.168.10.2) 导入现有的数据:
-v = 查看导入的详细信息
-f = 是当中间遇到错误时, 可以 skip 过去, 继续执行下面的语句
当然你也可以用 source 命令导入
好了, 目前为止主服务器(192.168.10.1)和从服务器(192.168.10.2)现有的数据已经成功手动同步
接下来修改从服务器(192.168.10.2)的 mysql 配置文件:
配置文件修改完成, 此时在从服务器中登入自己的 Mysql, 而不是远程登入主服务器(192.168.10.1)
Slave_IO_Running 如果是 Yes 的话代表成功从主服务器中同步到 bin-log 日志
Slave_SQL_Running 如果是 Yes 的话代表成功执行 bin-log 日志中的 SQL 语句
此时的 Master_Log_FIle 和 Read_Master_Log_Pos 的值应该对应主服务器中的 show master status 命令的值
Connect_Retry 中的 60 代表每 60 秒就去主服务器同步 bin-log 日志
OK, 如果你看到的是那两个关键的 Yes, 那你就可以去测试了, 在主服务器插入新的数据, 再去从服务器查看, 不出意外的话, 你会兴奋一下, 数据已经同步了
这里再说一下其他经常用到的命令:
这里也同时说一下操作中的常见错误:
问题: 从数据库无法同步
Slave_SQL_Running 值为 NO, 或 Seconds_Bebind_Master 值为 Null
原因:
一、 程序有可能在 slave 上进行了写操作
二、 也有可能是 slave 机器重启后, 事务回滚造成的
解决方法一:
解决方法二:
再次通过 show slave status 查看:
如果 Slave_SQL_Running 的值变为 Yes, Seconds_Bebind_Master 的值为 0 时, 即正常
好了, 如上是我自己在操作中所总结的一些内容, 如有更好的建议, 欢迎留言一起探讨
顺便说一下, 我使用的是 Ubuntu 12.04