LMLPHP后院

MySQL 使用 mysqldump 创建一个数据快照技术

maybe yes 发表于 2018-08-12 11:21

MySQL 主从同步配置,使用 mysqldump 创建数据快照。

一种方法在已存在的主数据库创建数据快照,使用 mysqldump 工具创建一个包含所有数据库的用来复制的转储文件。一旦创建完成,就可以在从数据库上导入这个文件开始复制进程。

下面示例备份所有数据库到一个文件名为 dump.db,导出过程中包含来 --master-data 参数,这个参数能够自动的添加 CHANGE MASTER TO 语句,从服务器需要这个语句开始复制进程。

$ mysqldump --all-databases --master-data > dump.db

如果不使用 --master-data,在导出的时候需要优先在一个单独的会话中手动的锁定表(使用 FLUSH TABLES WITH READ LOCK),然后退出或者在第二个会话中执行 UNLOCK TABLES 来释放锁。同样也必须要使用 SHOW MASTER STATUS 获取二进制日志文件的位置信息来匹配快照数据,在开始从服务器复制的时候使用这个信息来执行适当的 CHANGE MASTER TO 语句。

MySQL 获取复制主服务器二进制日志坐标技术

maybe yes 发表于 2018-08-12 10:28

MySQL 主从同步配置,获取复制主服务器的二进制日志文件坐标。

配置从服务器复制,必须提前确定主服务的当前二进制日志的坐标。从服务器启动复制进程的时候需要这些信息,从二进制日志中找到正确的点它才能启动处理事件。

在从服务想要开启复制进程开始同步前,如果主服务已经有数据,必须先停止在主服务上处理语句,然后获取当前二进制日志文件坐标并在主服务允许执行语句前导出数据。如果不停止主服务执行语句,导出的数据和获取的主服务的状态信息会不匹配,最终数据不一致或者毁坏从服务的数据库。

获取主服务的二进制日志坐标,如下步骤:

1. 在命令行开启一个会话连接到主服务,刷新所有表并阻止写入语句:

mysql> FLUSH TABLES WITH READ LOCK;

MySQL 创建同步复制用户技术

maybe yes 发表于 2018-08-12 10:02

MySQL 主从同步配置,创建同步复制用户。

从服务器连接到主服务器需要 MySQL 的用户名和密码,所以主服务器必须要设置用来同步的用户。一旦授予了 REPLICATION SLAVE 权限,任何用户都可以用来同步。可以为每个从服务器单独创建一个账户,也可以都使用同一个账户。

对于从库,连接使用的用户名和密码存储在文本文件 master.info 中。因此,建议为复制功能单独创建一个用户,以尽量减少和其他账户妥协的可能性。

创建用户使用 CREATE USER,授权使用 GRANT。创建一个只为同步复制使用的账户,只需授予 REPLICATION SLAVE 权限即可。

举例,创建一个用户 lmlphp,可以从任何主机连接到 lmlphp.com,在主服务器上执行以下语句即可,如下:

MySQL 同步复制从服务器配置技术

maybe yes 发表于 2018-08-12 09:50

MySQL 主从同步配置,从服务器配置。

server-id 必须设置,且保持唯一,不能和其他服务器冲突。如下:

[mysqld]
server-id=2

从服务器无需设置 log-bin,如果设置了 log-bin,相对于其他从服务就是一个主服务的角色。

配置完成后,需要重启数据库。

MySQL 同步复制主服务器配置技术

maybe yes 发表于 2018-08-12 09:38

MySQL 主从同步配置,主服务器配置。

必须要设置 server-id 和 log-bin。如下:

[mysqld]
log-bin=mysql-bin
server-id=1

server-id 是正整数,小于 2^32。配置文件为 my.cnf 或 my.ini。

为保证持久性和一致性,InnoDB 需加上以下配置:

innodb_flush_log_at_trx_commit=1
sync_binlog=1

为保证服务的性能,确保 skip-networking 项开启。

配置完成后,需要重启数据库。

2019-03-21 00:10:28 1553098228 0.022203