本文共 4108 字,大约阅读时间需要 13 分钟。
MySQL 复制是一种高效的数据库管理策略,通过将主数据库(master)的数据复制到从数据库(slave)上,实现数据的高效同步。本文将从基础到高级功能,全面介绍MySQL复制的实现原理、配置方法及优化技巧。
MySQL 复制基于二进制日志功能,通过将主库的DDL和DML操作记录到二进制日志中,然后由从库根据这些日志文件进行数据恢复,实现主从数据的一致性。具体流程如下:
start slave
命令启动复制过程。MySQL 提供三种复制模式,根据需求选择合适的模式:
BINLOG_FORMAT=STATEMENT
,记录完整的SQL语句。BINLOG_FORMAT=ROW
,记录每行数据的变更。mysql> show global variables like 'binlog_format';+---------------+-----------+| Variable_name | Value |+---------------+-----------+| binlog_format | STATEMENT |+---------------+-----------+1 row in set (0.00 sec)
mysql> set global binlog_format='row';Query OK, 0 rows affected (0.00 sec)mysql> show global variables like 'binlog_format';+---------------+-------+| Variable_name | Value |+---------------+-------+| binlog_format | ROW |+---------------+-------+1 row in set (0.00 sec)
mysql> show binlog events in 'mysql-bin.000027' from 107;+------------------+-----+------------+-----------+-------------+---------------------------------------------+| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |+------------------+-----+------------+-----------+-------------+---------------------------------------------+| mysql-bin.000027 | 107 | Query | 3306 | 175 | BEGIN || mysql-bin.000027 | 175 | Query | 3306 | 264 | use `test`; insert into t1 values (10) || mysql-bin.000027 | 264 | Query | 3306 | 333 | COMMIT || mysql-bin.000027 | 333 | Query | 3306 | 401 | BEGIN || mysql-bin.000027 | 401 | Query | 3306 | 495 | use `test`; update t1 set id=70 where id=60 || mysql-bin.000027 | 495 | Query | 3306 | 564 | COMMIT || mysql-bin.000027 | 564 | Stop | 3306 | 583 | |+------------------+-----+------------+-----------+-------------+---------------------------------------------+7 rows in set (0.00 sec)
[client]port=3306# 其他配置...[mysqld]server-id=3306log-bin=mysql-binread-only=0binlog_do_db=testbinlog_ignore_db=mysql
[mysqld]server-id=3307log-bin=mysql-binmaster_host=127.0.0.1master_port=3306master_user=replmaster_password=asdfreplicate_do_db=testreplicate_ignore_db=mysql
mysql> flush tables with read lock;mysql> unlock tables;
cp /path/to-master/data/* /path/to-slave/data/
mysql> start slave;
mysql> show slave status\G
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.dll';mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.dll';
mysql> set global rpl_semi_sync_master_enabled=on;mysql> set global rpl_semi_sync_slave_enabled=on;
mysql> show global status like '%semi_sync%';
log_slave_updates
:默认关闭,需开启以支持多主复制。read-only
:限制从库的写操作权限。master_connect_retry
:配置主库连接重试间隔。replicate_do_db
和 replicate_ignore_db
:指定复制的数据库。slave_skip_errors
:忽略特定错误号。master_delay
:配置延迟复制时间。从库状态查看:
mysql> show slave status\G
主从同步:
mysql> flush tables with read lock;mysql> select master_pos_wait('mysql-bin.000031', '736');
从库复制错误处理:
mysql> set global sql_slave_skip_counter=1;mysql> start slave;
主-主复制解决冲突:
auto_increment_increment=2auto_increment_offset=1
性能优化:
replicate_do_db
和replicate_ignore_db
实现。slave_parallel_workers
实现。mysql> stop slave;
mysql> reset slave;mysql> reset master;
mysql> change master to master_host='新主库地址';
通过以上步骤和配置,读者可以实现一个高效、可靠的MySQL复制环境,提升数据库的性能和可用性。
转载地址:http://dkdfk.baihongyu.com/