如何在CentOS 6中配置MySQL主从复制
时间:2019-08-20 17:58:30 来源:igfitidea点击:
在主从复制中,一个数据库服务器(Master)可以将数据库复制到一个或者多个MySQL数据库服务器(Slave)。
从服务器不需要总是与主服务器连接,一旦从服务器启动并且当我们启动从线程(start Slave命令)时,它将再次自动接收所有复制的更新。
在本教程中,我们将学习如何在CentOS 6.4中设置MySQL主从复制。
搭建环境
- 操作系统:CentOS 6.4
- 架构:i386
- MySQL版本:5.5
- 主服务器ip地址:192.168.56.121
- 从服务器ip地址:192.168.56.108
- iptables服务是停止的(/etc/init.d/iptables stop)
- SELINUX是禁用的。
在主服务器和从服务器上安装必备组件
yum install mysql mysql-server mysql-devel
MySQL主服务器配置步骤
用root用户登录主服务器。
备份my.cnf文件
cp -p /etc/my.cnf /etc/my.cnf.orig.`date +%F`
编辑my.cnf
/var/lib/mysql默认为mysql数据目录的路径,如果情况不同,则修改 datadir值
vi /etc/my.cnf
在mysqld块后面添加下面内容:
[mysqld] bind-address=192.168.56.121 server-id=1 binlog-ignore-db = "mysql" binlog-format = mixed log-bin=mysql-bin datadir=/var/lib/mysql innodb_flush_log_at_trx_commit=1 sync_binlog=1
重启MySQL服务器
/etc/init.d/mysqld restart
以root用户身份登录MySQL主服务器。并为复制创建用户。
这里,我们将使用replication作为新的用户名。
CREATE USER [email protected]; GRANT REPLICATION SLAVE ON *.* TO [email protected] IDENTIFIED BY 'password'; flush privileges; exit
进行数据库转储(导出数据库数据)
mysqldump --skip-lock-tables --single-transaction --hex-blob --flush-logs --master-data=2 -u root -p database-name > database-name-backup.sql
再次登录Master MySQL 服务器,执行下面命令
mysql> FLUSH TABLES WITH READ LOCK; mysql> show master status; mysql> unlock tables;
记录File和Position的值。
例如:
mysql> FLUSH TABLES WITH READ LOCK; Query OK, 0 rows affected (0.01 sec) mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000002 | 107 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.01 sec) mysql> unlock tables; Query OK, 0 rows affected (0.00 sec)
也可以从MySQL转储文件中获取 MASTER_LOG_FILE,MASTER_LOG_POS的信息。
[root@localhost ~]# head -100 database-name-backup.sql | grep "MASTER_LOG_POS" -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=107; [root@localhost ~]#
把数据库备份转储文件上传到从服务器中
scp database-name-backup.sql [email protected]:~
MySQL从服务器的配置步骤
登录从MySQL服务器,备份my.cnf文件
cp -p /etc/my.cnf /etc/my.cnf.orig.`date +%F`
编辑my.cnf
vi /etc/my.cnf
在mysqld块后面添加内容如下:(如果有多个从服务器,server-id不能一样)
[mysqld] server-id=50 binlog-format=mixed log_bin=mysql-bin relay-log=mysql-relay-bin log-slave-updates=1 read-only=1
重启从服务器mysql服务
/etc/init.d/mysqld restart
登录MySQL,创建数据库
mysql > create database database-name; mysql > exit;
恢复数据库中的转储文件
mysql -u root -p database-name < database-name-backup.sql
再次登录MySQL,运行下面给出的命令
MASTER_LOG_FILE和MASTER_LOG_POS的值来自主服务器。
mysql > CHANGE MASTER TO MASTER_HOST='192.168.56.121',MASTER_USER='replication',MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=107;
现在运行从属服务并检查其状态。
mysql > START SLAVE; mysql > SHOW SLAVE STATUS G;
现在从属服务器已经启动并运行,数据正在同步
要停止从属服务:
mysql > STOP SLAVE;
如何知道SLAVE服务是否正常工作?
执行命令SHOW SLAVE STATUS G
后,会有一些状态。
Slave_IO_State="Waiting master to send event"(显示slave等待master发送事件)
Last_Error=0 (显示错误的编号,0表示成功)
Seconds_Behind_Master=0(滞后主服的时间)
您还可以通过创建测试数据库或更新/创建表来检查主从复制的状态。