在安装配置MySQL主从复制前,主从服务器的安装请查看《MySQL5.5源码包安装 for Red Hat Enterprise Linux 6》这篇文章。
1、主从服务器的信息如下
2、master服务器创建repl@192.168.0.11账号用于slave服务器连接
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.11' IDENTIFIED BY 'abc123';
3、在master服务器的/etc/my.cnf的[mysqld]部分添加如下参数
log_bin=mysql-bin
server_id=10
重启mysql服务,使配置生效
[root@leon /]# service mysql restart
4、在slave服务器的/etc/my.cnf的[mysqld]部分添加如下参数
log_bin = mysql-bin
server_id = 11
重启mysql服务,使配置生效
[root@leonslave /]# service mysql restart
5、生成master服务器的数据文件快照
会话一:确保数据库没有操作,以便获得一致性的快照
mysql> flush tables with read lock;
会话二:记下显示结果中的日志文件及偏移位置。
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000009 | 107 | | |
+------------------+----------+--------------+------------------+
会话三:打包data目录的文件
[root@leon mysql5548]# tar -cvf data.tar data
会话一:结束锁表操作
mysql> unlock tables;
6、将master服务器的一致性备份恢复到slave服务器
停止mysql服务,删除data目录,并将master的data.tar解压在这个位置
[root@leonslave mysql5548]# service mysql stop
[root@leonslave mysql5548]# rm -rf data
[root@leonslave mysql5548]# tar -xvf data.tar
7、在slave服务器使用--skip-slave-start 选项启动slave数据库,这样不会立即启动slave数
据库服务上的复制进程,方便我们对从数据库的服务进行进一步的配置
[root@leonslave mysql5548]$ ./bin/mysqld_safe --skip-slave-start &
对slave数据库服务器做相应设置,指定复制使用的用户,主数据库服务器的IP、端
口以及开始执行复制的日志文件和位置等
mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.10',MASTER_USER='repl',MASTER_PASSWORD='leonliao',
MASTER_LOG_FILE='mysql-bin.000009',MASTER_LOG_POS=107;
启动slave线程
mysql> start slave;
查看slave线程的状态,若Slave_IO_Running和Slave_SQL_Running参数都为YES,表示复制已经运行
mysql> show slave status\G;
8、常见的问题
Slave_IO_Running参数如果是connecting,表示还未连接到master数据库,产生的原因有如下几种:
a、防火墙问题
b、用户的权限问题
c、在slave数据库连接master数据库的IP、用户名、密码、日志、pos等配置不正确
1、主从服务器的信息如下
主从 | IP地址 | 主机名称 |
master | 192.168.0.10 | leon |
slave | 192.168.0.11 | leonslave |
2、master服务器创建repl@192.168.0.11账号用于slave服务器连接
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.11' IDENTIFIED BY 'abc123';
3、在master服务器的/etc/my.cnf的[mysqld]部分添加如下参数
log_bin=mysql-bin
server_id=10
重启mysql服务,使配置生效
[root@leon /]# service mysql restart
4、在slave服务器的/etc/my.cnf的[mysqld]部分添加如下参数
log_bin = mysql-bin
server_id = 11
重启mysql服务,使配置生效
[root@leonslave /]# service mysql restart
5、生成master服务器的数据文件快照
会话一:确保数据库没有操作,以便获得一致性的快照
mysql> flush tables with read lock;
会话二:记下显示结果中的日志文件及偏移位置。
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000009 | 107 | | |
+------------------+----------+--------------+------------------+
会话三:打包data目录的文件
[root@leon mysql5548]# tar -cvf data.tar data
会话一:结束锁表操作
mysql> unlock tables;
6、将master服务器的一致性备份恢复到slave服务器
停止mysql服务,删除data目录,并将master的data.tar解压在这个位置
[root@leonslave mysql5548]# service mysql stop
[root@leonslave mysql5548]# rm -rf data
[root@leonslave mysql5548]# tar -xvf data.tar
7、在slave服务器使用--skip-slave-start 选项启动slave数据库,这样不会立即启动slave数
据库服务上的复制进程,方便我们对从数据库的服务进行进一步的配置
[root@leonslave mysql5548]$ ./bin/mysqld_safe --skip-slave-start &
对slave数据库服务器做相应设置,指定复制使用的用户,主数据库服务器的IP、端
口以及开始执行复制的日志文件和位置等
mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.10',MASTER_USER='repl',MASTER_PASSWORD='leonliao',
MASTER_LOG_FILE='mysql-bin.000009',MASTER_LOG_POS=107;
启动slave线程
mysql> start slave;
查看slave线程的状态,若Slave_IO_Running和Slave_SQL_Running参数都为YES,表示复制已经运行
mysql> show slave status\G;
8、常见的问题
Slave_IO_Running参数如果是connecting,表示还未连接到master数据库,产生的原因有如下几种:
a、防火墙问题
b、用户的权限问题
c、在slave数据库连接master数据库的IP、用户名、密码、日志、pos等配置不正确