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

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

最后还需要再指定一下日志信息:


mysql> CHANGE MASTER TO
       MASTER_HOST='<MASTER_HOST>',
       MASTER_USER='<SLAVE_USER>',
       MASTER_PASSWORD='<SLAVE_PASSWORD>',
       MASTER_LOG_FILE='<FILE>',
       MASTER_LOG_POS=<POSITION>;


注:不要在my.cnf配置文件里设置MASTER_USER和MASTER_PASSWORD,因为最终生效的是CHANGE MASTER TO生成的master.info文件里的信息。

在主服务器上直接拷贝数据文件虽然很快,但需要锁表或者停止服务,这会影响线上服务。如果先前已经有了从服务器,那么可以用旧的从服务器做母本来克隆新的从服务器:

先在旧的从服务器上查询日志信息:


mysql> SHOW SLAVE STATUS;


我们需要的是其中的Relay_Master_Log_File & Exec_Master_Log_Pos。

然后在旧的从服务器上按照前面的方法得到数据,并在新的从服务器上还原。

接着在新的从服务器上设置日志信息:


mysql> CHANGE MASTER TO
       MASTER_HOST='<MASTER_HOST>',
       MASTER_USER='<SLAVE_USER>',
       MASTER_PASSWORD='<SLAVE_PASSWORD>',
       MASTER_LOG_FILE='<Relay_Master_Log_File>',
       MASTER_LOG_POS=<Exec_Master_Log_Pos>;


不管用那个方法,最后记得在从服务器上启动复制,并检查工作是否正常:


mysql> START SLAVE;

mysql> SHOW SLAVE STATUS;


如果IO线程和SQL线程都显示Yes,就可以感谢上帝了:

Slave_IO_Running 对应:Master_Log_File & Read_Master_Log_Pos

Slave_SQL_Running 对应:Relay_Master_Log_File & Exec_Master_Log_Pos

如果显示No,则说明前面某些配置步骤出错,或者对应的日志文件有问题。

故障

问题:主从复制不止何故停止了,我该怎么办?

答案:复制错误多半是因为日志错误引起的,所以首先要搞清楚是主日志错误还是中继日志错误,从错误信息里一般就能判断,如果不能可以使用类似下面的mysqlbinlog命令:


shell> mysqlbinlog <MASTER_BINLOG_FILE> > /dev/null

shell> mysqlbinlog <SLAVE_BINLOG_FILE> > /dev/null


如果没有错误,则不会有任何输出,反之如果有错误,则会显示出来。

如果是主日志错误,则需要在从服务器使用SET GLOBAL sql_slave_skip_counter,如下:


mysql> SET GLOBAL sql_slave_skip_counter = 1;

mysql> START SLAVE;


注:如果有多个错误,可能需要执行多次(提醒:主从服务器数据可能因此不一致)。

如果是中继日志错误,只要在从服务器使用SHOW SLAVE STATUS结果中的日志信息重新CHANGE MASTER TO即可,系统会抛弃当前的中继日志,重新下载:


mysql> CHANGE MASTER TO
       MASTER_LOG_FILE='<Relay_Master_Log_File>',
       MASTER_LOG_POS=<Exec_Master_Log_Pos>;
mysql> START SLAVE;


至于为什么使用的是Relay_Master_Log_File & Exec_Master_Log_Pos,参见概述。

问题:主服务器宕机了,如何把从服务器提升会主服务器?

答案:在一主多从的环境总,需选择数据最新的从服务器做新的主服务器。如下图所示:

提升从服务器为主服务器

在一主(Server1)两从(Server2,、Server3)的环境中,Server1宕机后,等到Server1和Server2把宕机前同步到的日志都执行完,比较Master_Log_File和Read_Master_Log_Pos就可以判断出谁快谁慢,因为Server2从 Server1同步的数据(1582)比Server3从Server1同步的数据(1493)新,所以应该提升Server2为新的主服务器,那么 Server3在CHANGE MASTER TO到Server2的时候应该使用什么样的参数呢?1582-1493=89,而Server2的最后的二进制日志位置是8167,所以答案是 8167-89=8078。

技巧

主从服务器中的表可以使用不同的表类型。比如主服务器可以使用InnoDB表类型,提供事务,行锁等高级特性,从服务器可以使用MyISAM表类型,内存消耗少,易备份等优点。还有一个例子,一台主服务器如果同时带很多个从服务器的话,势必会影响其性能,此时可以拿出一台服务器作为从服务器代理,使用BLACKHOLE表类型,只记录日志,不写数据,由它带多台从服务器,从而提升性能。

主从服务器中的表可以使用不同的键类型。比如主服务器用InnoDB,键用VARCHAR的话节省空间,从服务器使用MyISAM,键用CHAR提高速度,因为MyISAM有静态表一说。

主从服务器中的表可以使用不同的索引。主服务器主要用来应付写操作,所以除了主键和唯一索引等保证数据关系的索引一般都可以不加,从服务器一般用来应付读操作,所以可以针对查询特征设置索引,再进一步,不同的从服务器可以针对不同的查询设置不同的索引。

工具

有一些优秀的工具可以让你的复制工作得到事半功倍的效果,详细内容请参考各自文档:

Multi-Master Replication Manager for MySQL

Percona XtraBackup

Maatkit

Tungsten-replicator

此外,Google Project Hosting里还有很多有趣的项目,可用mysql+replication标签搜索。

说明:本文参考了下面列出的书籍中相关的内容:

High Performance MySQL: Optimization, Backups, Replication, and More

MySQL High Availability: Tools for Building Robust Data Centers

(来源:火丁笔记


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

猜你喜欢

  • Python爬虫框架之Scrapy中Spider的用法

    2023-10-04 10:38:21
  • asp如何设定程序的执行次数?

    2010-05-18 18:31:00
  • python中argparse模块用法实例详解

    2022-01-09 23:34:40
  • Mootools 1.2教程(8)——输入过滤第一部分(数字)

    2008-11-27 13:01:00
  • Python代码实现KNN算法

    2023-05-07 10:45:36
  • Git配置别名简化操作命令方式详解

    2022-03-20 03:34:12
  • python 如何对Series中的每一个数据做运算

    2023-11-19 23:33:07
  • 软件测试之使用Fiddler实现弱网测试

    2023-03-04 20:47:45
  • 分析python请求数据

    2023-09-26 08:46:08
  • Python flask框架如何显示图像到web页面

    2022-05-20 00:11:05
  • python __add__()的具体使用

    2022-11-29 07:49:22
  • 微信小程序页面缩放式侧滑效果的实现代码

    2023-09-02 05:21:45
  • Python牛刀小试密码爆破

    2021-10-05 14:18:47
  • Python3中.whl文件创建及使用

    2022-11-05 00:17:50
  • python实现AES算法及AES-CFB8加解密源码

    2022-06-14 01:24:01
  • SqlServer字符截取的具体函数使用

    2024-01-13 17:43:00
  • Python多进程编程技术实例分析

    2022-07-23 18:02:49
  • Python中Pyspider爬虫框架的基本使用详解

    2021-04-01 06:00:31
  • 出现“不能执行已释放的Script代码”错误的原因及解决办法

    2024-04-19 10:02:13
  • html风格tooltip效果的实现

    2010-04-08 13:00:00
  • asp之家 网络编程 m.aspxhome.com