一、概述
让一台服务器的数据与其他服务器数据保持同步。一台主库的数据可以同步到多台备库上,而备库本身也可以配置成其他服务器的主库。
主要应用:
1) 数据分布
2) 负载均衡
3) 伪备份。在备份基础上能增加更安全的技术补充
4) 高可用性和故障切换。避免mysql单点失败
5) 升级测试。升级数据库前,将数据复制到备库,使得查询能够在备库按照预期执行。
支持两种复制方式
1) 基于语句的复制
2) 基于行的复制
两种方式复制原理一样:在主库上记录二进制日志、在备库重放日志 实现异步的数据复制。异步代表在同一时间点备库的数据与主库不一致,几秒,几分甚至几个小时的延迟。
复制是向后兼容,即备库数据库版本高于主库 而不能是 低于主库
关于开销:
1) 启用二进制日志带来的开销;
2) 每个备库也会对主库增加一些I/O开销
3) 锁竞争也会阻碍事务的提交
二、复制的工作原理
1. 在主库上把数据更改记录到二进制日志 (binary log) 中。
2. 备库将主库上的日志复制到中继日志 (relay log) 中。
3. 备库读取中继日志中的事件,将数据放入备库中。
三、配置复制
1. 创建复制账号
建议为每台数据库服务器创建相同账号。
mysql> grant replication slave,replication client on *.* to [email protected]‘192.168.0.%‘ identyfied by ‘password‘;
2. 配置主库
vi /etc/my.conf [mysqld] log-bin=mysql-bin //[必须]启用二进制日志 server-id=10 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
3. 配置备库
vi /etc/my.conf [mysqld] log-bin=mysql-bin //[非必须]启用二进制日志 server-id=6 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
4. 分别重启数据库
/etc/init.d/mysql restart
5. 登录主服务器的mysql,查询master的状态
mysql>show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000004 | 308 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec) 注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化
记下file 和 position 用于配置备库
6. 配置备库
mysql>change master to master_host=‘192.168.145.10‘,master_user=‘repl‘,master_password=‘password‘, master_log_file=‘mysql-bin.000004‘,master_log_pos=308; //注意不要断开,308数字前后无单引号。
7. 启动从服务器复制功能
Mysql>start slave;
8. 检查从服务器复制功能状态
mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.145.10 //主服务器地址 Master_User: repl//授权帐户名,尽量避免使用root Master_Port: 3306 //数据库端口,部分版本没有此行 Connect_Retry: 60 Master_Log_File: mysql-bin.000004 Read_Master_Log_Pos: 600 //#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos Relay_Log_File: ddte-relay-bin.000003 Relay_Log_Pos: 251 Relay_Master_Log_File: mysql-bin.000004 Slave_IO_Running: Yes //此状态必须YES Slave_SQL_Running: Yes //此状态必须YES ...... 注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。
参考:
1) 高性能mysql第三版
2) itwork的blog
时间: 2024-10-12 16:47:26