环境:系统内核版本:Linux version 2.6.18-308.el5
Mysql版本:mysql-5.5.28
主服务器IP:172.16.7.1
从服务器IP:172.16.7.2
注意事项:
1.为了避免循环复制,在主从模型中,任何一台服务器彼此间都需要一个ID号标识,而且彼此间绝对不能相同。
2.在主服务器上,并不是每个节点都可以到主服务器上面进行同步复制数据的,因此需要在主机上建立密码帐号,只有持有帐号密码的用户才可以访问复制数据。
3.从服务器开启中继日志
搭建一个简单的主从服务器需要如下基本要求:
对主服务器:
1.每个server-id =要唯一
2.开启二进制日志
3.创建一个具有复制权限的用户帐号
4.设定二进制日志缓冲区刷写,每当有二进制日志更新,就立即同步
对从服务器:
1.每个server-id =要唯一
2.开启中继日志
3.以中继用户连接到主服务器就可以
4.设置为只读
如果主服务器已经运行很久了,在主服务器上要创建一个完全备份,而后在从服务器应用此备份,并在连接至主服务器指定二进制日志文件和其事件位置
操作步骤如下:
主服务器配置:
vim /etc/my.cnf
datadir = /data/mydata #数据所在目录
server-id = 1 #用于唯一标示自己
log-bin=/binlog/mysql-bin #二进制日志所在目录,将其和数据分开存放
sync_binlog=1 #同步二进制日志
启动mysqld
service mysqld start
进入数据库,给从服务器复制权限
mysql>GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO rpuser@'172.16.%.%'IDENTIFIED BY'redhat';
mysql>FLUSH PRIVILEGES;
mysql>SHOW MASTER STATUS; //指定从哪儿开始复制
msql>SHOW BINLOG EVENTS IN 'mysql-bin.000001';//查看以前的事件
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 354 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec) //记录二进制日志事件发生所在位置
在从服务器上
安装mysql,添加系统帐号
修改配置文件
vim /etc/my.cnf
datadir = /data/mydata
#log-bin=mysql-bin //二进制日志开启功能注释掉
server-id = 10 //自己的ID号
relay-log = /relaylog/mysql-relay //开启中继日志
relay-log-index = mysql-relay.index //中继日志索引
read-only=1 //从服务器只提供读的功能,设定为只读
启动服务
[root@lab ~]#service mysqld start
进入数据库,设定主服务器
mysql>CHANGE MASTER TO master_host='172.16.7.1', master_user='reuser', master_password='redhat', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=354;
######################################
master_log_file='mysql-bin.000001'//指定从哪个二进制日志文件开始复制
master_log_pos=354 //从二进制日志复制的位置
以上的这两项参数可以通过主服务器中mysql>SHOW MASTER STATUS中获取
启动从服务器
mysql>START SLAVE;//默认是两个线程都启动的,如果想要启动一个线程,可以手动指定
mysql>SHOW SLAVE STATUS\G;//查看从服务器是否启动成功;查看各服务器中变量是否成功启用
验证:
主服务器:在主服务器上创建数据库查看从服务器是否正常
查看主服务器状态
从服务器是否同步
以上是主服务器中没有数据的情况,假如说从服务器同步主服务器中数据时主服务器中已经存在有数据:
则在同步之前要将主服务器中之前的数据导入到从服务器
Master服务器:
mysqldump --all-databases --lock-all-tables --flush-logs --master-data=2 >/tmp/data.sql
scp /tmp/data.sql lab1:/tmp
并记录下主服务器现在的二进制日志及所在位置
mysql> FLUSH TABLES READ LOCK;
Query OK, 0 rows affected (0.06 sec)
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 107 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)
Slave服务器:
导入主服务器中原有数据
mysql
mysql>CHANGE MASTER TO master_host='172.16.7.1', master_user='reuser', master_password='redhat', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=107;
启动从服务器即可
mysql>START SLAVE;
以上为实验的简单步骤,仅供各位参考。。