攻克《Linux 系统运维之MySQL DBA》(二)-MySQLReplication
第3章MySQLReplication
3.1 MySQL Replication 概述
MySQL Replication 俗称MySQL AB 复制,主要是通过把主服务器上的二进制日志通过网络传到
从服务器上,MYSQL 会自己把二进制日志转换成相关的DDL,DML,DCL 等语句!但这种复制不
同于MySQL 簇,它是单向异步的。目前MySQL 复制在企业应用率非常高,已经成为系统工程师
必备的技能。
具体的原理请参考MySQL 官方文档:http://dev.mysql.com/doc/refman/5.1/zh/index.html
3.2 安装MySQL Slave
实验环境:
实验环境是沿用第二章实验基础上的:
主机名IP 地址作用
MySQL-Master 10.20.5.20 MySQL 主库服务器
MySQL-Slave 10.20.5.30 MySQL 从库服务器
3.3 在MySQL Master 上的配置
3.3.1 创建Replication用户
[root@MySQL-Master ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.55-log Source distribution
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> GRANT REPLICATION SLAVE,reload,super ON *.* TO [email protected]
IDENTIFIED BY
'123456';
Query OK, 0 rows affected (0.00 sec)
Mysql>quit
3.3.2 修改MySQL配置文件。
[root@MySQL-Master ~]# vim /etc/my.cnf
server-id=20#1..设置server id,一般取ip的最后一个字节
log-bin=mysql-binlog #打开二进制日志,最好放在不同的硬盘上,减小磁盘IO 消耗
expire_logs_day=10 #设置二进制日志保存日期
max_binlog_size=500M #设置每个binlog 文件的大小
修改完后重新加载数据库:[root@MySQL-Master ~]# /etc/init.d/mysqld restart
注意:mysql-5.1.45.tar.gz 版本默认开启了log-bin 选项,并且server-id 默认为1.
3.3.3 获得Master DB的相关信息
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 106 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
注意:供Slave DB 连接时使用。
3.3.4 备份Master DB数据到Slave DB
备份的方法有很多,可以直接复制数据文件,也可以使用mysqldump,在这里不再详述。本文全新的搭建,所以不存在数据同步的问题。
3.4 在MySQL Slave 上的配置。
3.4.1 修改MySQL配置文件
[root@MySQL-Slave ~]# vim /etc/my.cnf
server-id=30 #配置多个从服务器时依次设置id 号
slave-skip-errors=all #mysql 复制可能出现主服务器上可以运行的语句,从服务器不能够运行,所以我们在my.cnf 加一句slave-skip-errors=all 意思是忽略所有的sql 语句错误!
relay-log=mysql-relay-bin #该文件用于存放Slave 端的I/O 线程从Master 端读取的二进制文件信息
修改完后重启数据库:[root@MySQL-Slave ~]# /etc/init.d/mysqld restart
3.4.2 在Slave服务器授权。
mysql> CHANGE MASTER TO
-> MASTER_HOST='10.20.5.20',
-> MASTER_USER='root',
-> MASTER_PASSWORD='123456',
-> MASTER_LOG_FILE='mysql-bin.000003',
-> MASTER_LOG_POS=106;
Query OK, 0 rows affected (0.04 sec)
参数说明:
MASTER_HOST:Master 主机名(或者IP 地址)
MASTER_USER:Slave 连接Master 主机的用户名
MASTER_PASSWORD:Slave 连接Master 的用户密码
MASTER_LOG_FILE:开始复制的日志文件名称
MASTER_LOG_POS:开始复制的日志文件位置,也就是Log Position。
3.4.3 启动Slave DB
mysql> START SLAVE;
Query OK, 0 rows affected (0.00 sec)
下面是MySQL-Slave 服务器的输出:
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.20.5.22
Master_User: root (一般不用root复制)
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 106
Relay_Log_File: hy-mysql3-relay-bin.000088
Relay_Log_Pos: 2339
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
这个输出,最关键处就是"Slave_IO_Running: Yes“和“Slave_SQL_Running: Yes”,这两个值全是"Yes"就表明主从复制正常,否则就是有问题。
3.5 测试复制是否成功。
可以在Master DB 创建一个数据库,或者表,到Slave DB 上看,如果配置成功就可以成功同步的。