首页 > 数据库 > MySQL > 正文

分析MySQL复制以及调优原理和方法

2024-07-24 12:50:40
字体:
来源:转载
供稿:网友

一. 简介

MySQL自带复制方案,带来好处有:

数据备份。

负载均衡。

分布式数据。

概念介绍:

主机(master):被复制的数据库。

从机(slave):复制主机数据的数据库。

复制步骤:
(1). master记录更改的明细,存入到二进制日志(binary log)。
(2). master发送同步消息给slave。
(3). slave收到消息后,将master的二进制日志复制到本地的中继日志(relay log)。
(4). slave重现中继日志中的消息,从而改变数据库的数据。

下面放一张经典的图片来说明这一过程:

二. 实现复制

实现复制有以下步骤:

1.设置MySQL主库的二进制日志以及server-id

MySQL配置文件一般存放在/etc/my.cnf

# 在[mysqld]下面添加配置选项[mysqld]server-id=1log-bin=mysql-bin.log

server-id是数据库在整个数据库集群中的唯一标示,必须保持唯一。
重启MySQL。

注:如果MySQL配置文件中已经配置过此文件,则可以跳过此步。

2.新建复制账号

在主库里面新建用于从库复制主库数据的账号,并授予复制权限。

mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO user_name@'host' IDENTIFIED BY 'password';

3.设置MySQL主库server-id

和第二步配置一样,要注意的地方有两点:

如果不需要从库作为别的从库的主库的话,则不需要配置二进制日志。很多时候复制并不需要复制主库的全部数据库(特别是mysql的信息配置库)。因此可以配置replicate_do_db来指定复制的数据库 4.从库初始化主库的数据

如果数据量不算大的情况下,可以使用mysqldump工具导出主库数据,然后导入到从库里面。

mysqldump --single-transaction --triggers --master-data databasename > data.sql

如果数据量大的情况下应该使用Xtrabackup去进行数据库的导出,此处不做介绍。
可能会有同学问,为什么不直接使用二进制日志进行初始化呢?

如果我们主库运行了比较长的一段时间,并不太适合使用从库根据二进制日志进行复制数据,直接使用二进制日志去初始化从库会比较耗费时间和性能。更多的情况下,主库的二进制日志的配置项没有打开,因此也就不存在以前操作的二进制日志。 5.开启复制

从库执行下面命令

mysql> CHANGE MASTER TO MASTER_HOST='host',-> MASTER_USER='user',-> MASTER_PASSWORD='password',-> MASTER_LOG_FILE='mysql-bin.000001',-> MASTER_LOG_POS=0;

注意最后的两个命令:MASTER_LOG_FILE和MASTER_LOG_POS,表示从库的从哪个二进制文件开始读取,偏移量从那里开始,这两个参数可以从我们导入的SQL里面找到。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表