MySQL主从复制
程序员文章站
2024-03-21 08:10:52
...
1、复制解决的问题
- 数据分布
可以在不同的地理位置来分布数据备份,如不同的数据中心。 - 负载均衡
通过MySQL复制可以将读操作分布到多个服务器上,实现对读密集型应用的优化,且实现方便。如DNS轮询(将一个机器名指向多个IP地址),将负载分配到不同的MySQL服务器上。 - 备份
对于备份来说,复制是一项很有意义的技术补充,但复制既不是备份也不能取代备份。 - 高可用性和故障切换
避免MySQL单点失败,快速切换缩短宕机时间。 - MySQL升级测试
使用更高版本的MySQL作为备库,实现MySQL升级。
2、复制的基本原理
slave会从master 读取 binlog 来进行数据同步
MySQL复制过程分成三步:
- master 将 改变 记录到二进制日志(binary log)。这些记录过程叫做 二进制日志事件,binary log events;
- slave将master 的 binary log events 拷贝到它的中继日志(relay log);
- slave 重做中继日志中的事件,将改变应用到自己的数据库中。MySQL复制是异步的串行化的。
3、复制的基本原则
- 每个slave 只能有一个master
- 每个slave只能有一个唯一的服务器ID
- 每个master可以有多个salve
4、复制的最大问题
有网络延时
5、一主一从常见配置
1、 mysql版本一致且后台以服务运行,主从主机在一个网段;
2、 主从都配置在[mysqld]节点下,都是小写;
3、 主机修改 my.ini 配置文件(Windows);
- 【必须】主服务器唯一ID:server-id=1
- 【必须】启用二进制日志:log-bin=C:/ProgramData/MySQL/MySQL Server 5.6/data/mysqlbin
- 【可选】启用错误日志:log-err=C:/ProgramData/MySQL/MySQL Server 5.6/data/mysqlerr
- 【可选】根目录:basedir=”C:/ProgramData/MySQL/MySQL Server 5.6/”
- 【可选】临时目录:tmpdir=”C:/ProgramData/MySQL/MySQL Server 5.6/”
- 【可选】数据目录:datadir=”C:/ProgramData/MySQL/MySQL Server 5.6/Data”
- 表示主机,可读可写:read-only=0
- 【可选】设置不要复制的数据库:binlog-ignore-db=mysql
- 【可选】设置需要复制的数据库:binlog-do-db=需要复制的主数据库名字
4、从机修改 my.cnf 配置文件(Linux);
- 【必须】从服务器 唯一ID
- 【可选】启用二进制日志:log-bin=mysql-bin
5、因修改过配置文件,请重启 主机和从机 的mysql服务;
6、主机从机都关闭防火墙;
windows 手动关闭;
linux :service iptables stop
7、在Windows主机上建立账户并授权slave;
①
GRANT REPLICATION SLAVE ON *.* TO 'zhangsan'@'从机IP' IDENTIFIED by '123456';
flush privileges; #刷新权限
② 查询master 状态,得到File(要复制的二进制文件名) 和Position(复制的起始位置) 的值:
show master status;
8、在Linux从机上配置需要复制的主机;
① 此处MASTER_LOG_FILE 和MASTER_LOG_POS 要配置的值分别为上面File 和 Position的值。
GRANT MASTER TO MASTER_HOST='主服务器IP',
MASTER_USER='zhangsan',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysqlbin.数字',MASTER_LOG_POS=具体值;
② 启动从服务器复制功能:
start slave;
③ 查看slave 状态:
show slave status;
确保:
9、主机新建库、新建表、insert记录,从机自动复制;
10、如何停止从服务复制功能。
stop slave;
下一篇: Android 收集的常用的一些函数