- A+
为MySQL服务器配置复制非常简单。但由于场景不同,基本的步骤还是有所差异。最基本的场景是新安装的主库和备库,总的来说分为以下几步:
-
在每台服务器上创建复制账号
-
配置主库和备库。
-
通知备库连接到主库并从主库复制数据。
一、配置复制账号
MySQL会赋予一些特殊的权限给复制线程。在备库运行的I/O线程会建立一个到主库的TCP/IP连接,这意味着必须在主库创建一个用户,并赋予合适的权限。备库I/O线程以该用户名连接到主库并读取其二进制日志。通过如下语句创建用户账号:
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* -> TO repl@'192.168.0.%' IDENTIFIED BY 'password';
二、配置主库和备库
假设主库是服务器server1,需要打开二进制日志文件并制定一个独一无二的服务器ID(server ID),在主库的my.conf 文件中增加或修改如下内容:
log_bin = mysql-bin server_id = 10
如果之前没有在MySQL的配置文件中指定log-bin选项,就需要重启MySQL
备库也需要在 my.conf 中增加类似的配置,并且同样重启服务器。
log_bin = mysql-bin server_id = 2 relay_log = /var/lib/mysql/msqyl-reply-bin log_slave_updates = 1 read_only = 1
从技术上来讲,上述的参数只有server_id是必要的。
relay_log 指定中继日志的位置和命名
lpg_slave_updates 允许备库将其重放的时间也记录到自身的二进制日志中,这会为备库增加额外的工作。例如:当配置错误时可能会导致备库数据被修改。 如果可能的话,最好使用read_only配置选项,该选项会阻止任何没有特权权限的线程修改数据。
三、启动复制
这一步不要通过修改 my.conf 来配置,而是使用 CHANGE MASTER TO 语句,该语句完全替代了 my.conf 中相应的设置,并且允许以后指向别的主库时无需重启备库。命令如下:
mysql> CHANGE MASTER TO MASTER_HOST = 'sever1', -> MASTER_USEER = 'repl', -> MASTER_PASSWORD = 'password', -> MASTER_LOG_FILE = 'mysql-bin.000001', -> MASTER_LOG_POS = 0;
MASTER_LOG_POS 参数设置为0,因为要从日志的开头读取。
运行如下命令开启复制:
mysql> START SLAVE;
四、从另一个服务器开启复制
前面的设置都是假定主备库均为刚刚安装好且都是默认的数据,也就是说两台服务器上的数据相同,并且知道当前主库的二进制日志。在实际场景中,都是已经运行了一段时间的主库,然后用一台新安装的备库与之同步,此时这台备库并没有数据。
有一下几种办法可以用来初始化备库或者从其他服务器克隆数据到备库。包括从主库复制数据、从另外一台备库克隆数据,以及使用最近一次备份来启动备库,需要三个条件来让主库和备库保持同步:
-
在某个时间点的主库数据快照
-
主库当前的二进制日志文件,和获得数据快照时在该二进制日志文件中的偏移量,我们把这两个值成为 日志文件坐标(log file coordinates)。通过这两个值可以确定二进制日志文件的位置。可以通过 SHOW MASTER STATUS 来获取。
-
从快照时间到现在的二进制日志。
下面是一些从别的服务器克隆备库的方法:
冷备份
最基本的方法是关不主库,把数据复制到备库。重启主库后,会使用一个新的二进制日志文件,我们在备库通过执行 CHANGGE TO MASTER 指向这个文件的起始处。
热备份
如果仅使用了 MyISAM表,可以在主库运行时使用 mysqlhotcopy 或 rsync 来复制数据。
mysqldump
如果只包含InnoDB表,那么可以用 mysqldump 命令来转储主库数据并将其加载到备库,然后设置相应的二进制日志文件。
快照或者备份
Xtrabackup
另外的备库
注:不管选择哪种技术,都要能熟练运用,要记录详细的文档或编写脚本。因为可能不止一次需要做这样的事情,甚至当错误发生时,能够快速排查和处理。
2018年6月28日 15:38 沙发