本文实例讲述了mysql 复制原理与实践应用。,具体如下:
复制功能是将一个mysql数据库上的数据复到一个或多个mysql从数据库上。
复制的原理:在主服务器上执行的所有DDL和DML语句都会被记录到二进制日志中,这些日志由连接到它的从服务器获取,并复制到从库,并保存为中继日志,
这个过程由一个称为 IO线程 的线程负责,还有一个称为 SQL线程 的则按顺序执行中继日志中的语句。
复制有多种拓扑形式:
1、传统复制,一主多从,一个主服务器多个从服务器。
2、链式复制,一台服务器从主库复制,而另一台服务器又从这台复制,中间服务器又叫中继主库。
3、主主复制,两个主库互相接受写入和复制。
4、多源复制,一个从库,从多个主库复制。
一、复制如何操作
1、在主库上启用二进制日志记录。
2、在主库上创建一个复制用户。
3、在从训上设置唯一的 server_id。
4、从主库中备份数据。
5、在从库上恢复主库备份的数据。
6、执行CHANGE MASTER TO命令。
7、开始复制。
二、具体的操作步骤如下:
1、在 主库 上,启用二进制日志并设置server_id。
#设置server_idserver_id = 1#开启binlog日志log-bin = mysql-bin
2、在主库上创建复制用户
create user '用户名'@'%' identified by '密码';grant replication slave on *.* to '用户名'@'%';
3、在从库上设置server_id
#设置server_idserver_id = 10
4、备份主库上的数据
mysqldump -u root -p --all-databases --routines --events --triggers --single-transaction --master-data > 导出路径
5、在从库上恢复主库导出的数据
mysql -u root -p -f < 主库备份文件.sql
6、在从库上执行 CHANGE MASTER TO 命令
CHANGE MASTER TO MASTER_HOST='主库IP',MASTER_USER='主库复制用户',MASTER_PASSWORD='密码',MASTER_LOG_FILE='二进制日志名称',MASTER_LOG_POS=二进制日志位置;
二进制日志名称和二进制日志位置,已经在备份主库文件中包含了,类似如下所示:
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000016', MASTER_LOG_POS=47845;
7、从库上运行 start slave,然后 show slave status/G; 查看复制状态;
三、设置主主复制
假设主库分别是master1和master2。
1、设置master2为只读
set @@global.read_only = on;
2、在master2上创建复制用户,如果存在,则不用创建了
create user '用户名'@'%' identified by '密码';grant replication slave on *.* to '用户名'@'%';
新闻热点
疑难解答