MySQL复制的概述、安装、故障、技巧、工具

来源:Asp之家 时间:2011-04-11 08:36:00 

MongoDBRedis这样的NoSQL数据库的复制相比,MySQL复制显得相当复杂!

概述

首先主服务器把数据变化记录到主日志,然后从服务器通过I/O线程读取主服务器上的主日志,并且把它写入到从服务器的中继日志中,接着SQL线程读取中继日志,并且在从服务器上重放,从而实现MySQL复制。具体如下图所示:

MySQL复制

整个过程反映到从服务器上,对应三套日志信息,可在从服务器上用如下命令查看:


mysql> SHOW SLAVE STATUS;


Master_Log_File & Read_Master_Log_Pos:下一个传输的主日志信息。

Relay_Master_Log_File & Exec_Master_Log_Pos:下一个执行的主日志信息。

Relay_Log_File & Relay_Log_Pos:下一个执行的中继日志信息。

理解这些日志信息的含义对于解决故障至关重要,后文会详细阐述。

安装

先在主服务器上创建复制账号:


mysql> GRANT REPLICATION SLAVE ON *.*
       TO '<SLAVE_USER>'@'<SLAVE_HOST>'
       IDENTIFIED BY '<SLAVE_PASSWORD>';


注:出于安全性和灵活性的考虑,不要把root等具有SUPER权限用户作为复制账号。

然后设置主服务器配置文件(缺省:/etc/my.cnf):


[mysqld]

server_id = 100
log_bin = mysql-bin
log_bin_index = mysql-bin.index
sync_binlog = 1
innodb_flush_log_at_trx_commit = 1
innodb_support_xa = 1


注:一定要保证主从服务器各自的server_id唯一,避免冲突。

注:如果没有指定log_bin的话,缺省会使用主机名作为名字,如此一来一旦主机名发生改变,就会出问题,所以推荐指定log_bin(从服务器的relay_log存在一样的问题)。

注:sync_binloginnodb_flush_log_at_trx_commitinnodb_support_xa三个选项都是出于安全目的设置的,不是复制的必须选项。

接着设置从服务器配置文件(缺省:/etc/my.cnf):


[mysqld]

server_id = 200
log_bin = mysql-bin
log_bin_index = mysql-bin.index
relay_log = mysql-relay-bin
relay_log_index = mysql-relay-bin.index
read_only = 1
skip_slave_start = 1
log_slave_updates = 1


注:如果用户有SUPER权限,则read_only无效。

注:有了skip_slave_start,除非使用START SLAVE命令,否则从服务器不会开始复制。

注:设置log_slave_updates,让从服务器记录日志,有助于在必要时把从切换成主。

下面最重要的步骤是如何克隆一份主服务器的数据:

如果数据库使用的是MyISAM表类型的话,可按如下方式操作:


shell> mysqldump --all-databases --master-data=1 > data.sql


注:master-data选项缺省会打开lock-all-tables,并写入CHANGE MASTER TO语句。

如果数据库使用的是InnoDB表类型的话,则应该使用single-transcation


shell> mysqldump --all-databases --single-transaction --master-data=1 > data.sql


有了数据文件,传输到从服务器上并导入:


shell> mysql < data.sql


如果数据量很大的话,mysqldump会非常慢,此时直接拷贝数据文件能节省不少时间:

在拷贝之前要先锁定数据,然后再获得相关的日志信息(FILE & POSITION):


mysql> FLUSH TABLES WITH READ LOCK;

mysql> SHOW MASTER STATUS;


接下来拷贝数据文件时,如果是MyISAM表类型的话,直接拷贝即可;如果是InnoDB表类型的话,一定要先停止MySQL服务再拷贝,否则拷贝文件可能无法使用。把拷贝的数据文件直接复制到从服务器的数据目录。



标签:MySQL工具,MySQL安装技巧,mysql教程
0
投稿

猜你喜欢

  • 如何将 awk 脚本移植到 Python

    2022-02-28 05:40:52
  • Python lambda表达式filter、map、reduce函数用法解析

    2022-03-30 03:52:31
  • 使用tf.keras.MaxPooling1D出现错误问题及解决

    2021-02-07 05:01:28
  • ChatGPT帮我看下这段代码有什么问题

    2022-09-02 15:37:20
  • Python中获取网页状态码的两个方法

    2023-08-27 22:47:21
  • Javascript的匿名函数

    2008-05-07 13:33:00
  • Pytorch技巧:DataLoader的collate_fn参数使用详解

    2023-12-11 00:20:48
  • SQL 合并多行记录的方法总汇

    2024-01-22 08:42:56
  • pytorch sampler对数据进行采样的实现

    2023-02-09 20:05:40
  • Oracle学习笔记(六)

    2012-01-05 18:55:27
  • 关于document.cookie的使用

    2008-03-25 12:07:00
  • python递归函数求n的阶乘,优缺点及递归次数设置方式

    2022-12-08 16:17:08
  • 现代Python编程的四个关键点你知道几个

    2023-11-22 02:17:42
  • Python实现的RSS阅读器实例

    2021-11-21 14:46:49
  • Python中列表遍历使用range和enumerate的区别讲解

    2023-10-03 12:34:18
  • Win定时任务执行php脚本

    2024-05-06 10:07:55
  • 用python实现读取xlsx表格操作

    2022-11-26 17:08:19
  • python如何求解两数的最大公约数

    2021-01-16 07:38:18
  • Python imageio读取视频并进行编解码详解

    2021-02-20 07:32:53
  • Python中图像算术运算的示例详解

    2023-01-01 19:56:43
  • asp之家 网络编程 m.aspxhome.com