开门见山,首先,主服务器的mysql版本不能高于从服务器的版本 ,可以是一样的,其次端口号必须统一。
好了,现在开始配置双机热备(随后将会提到循环备份以及互备)我使用的版本为redhat5.4两台ip为192.168.1.10、192.168.0.11,备份数据库为test。
热备中数据库分类:master主数据库、slave从数据库
一、两台mysql均可以在本地登录,并设定好密码,打开防火墙3306端口否则,无法进行通讯。
- vi /etc/sysconfig/iptables
- #在里面添加3306端口
- -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
- :wq
二、在主数据库中添加用于备份的账号
- mysql> GRANT REPLICATION SLAVE ON *.* #注意 这里是星号
- -> TO "backupUser"@"IP" IDENTIFIED BY "password";
backupUser填写建立的用户名,IP为从服务器IP,password就不用说了吧~
三、修改主服务器的my.cnf在配置文件中添加
- server-id=1 #数据库id,默认1
- log-bin=log-bin #日志文件的名称,这里可以制定日志到别的目录 如果没有设置则默认主机名的一个日志名称
- binlog-do-db=db_name #记录日志的数据库 ,可选
- binlog-ignore-db=mysql #不记录日志的数据库 可选
log-bin是mysql产生的二进制日志,热备份就是读取二进制日志使数据得到时时同步,建议在binlog-ignore中添加mysql这个库,因为在我测试中这个库也被同步过来了,所以...你懂得
四、重启服务器载入新配置文件
进入数据库
- mysql -uroot -p
- password:
锁定数据库
- mysql> FLUSH TABLES WITH READ LOCK;
备份所需要的数据表
- mysqldump -uroot -ppassword test > /home/backup/mysql/test.sql
- #如果有多个就备份多个
锁定数据库是为了准备记录二进制日志的记录点,否则会在从机配置的时候不能正常读取二进制日志
查看在锁定数据库时二进制日志的记录点
- mysql> show master status;
- +----------------+----------+--------------+------------------+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
- +----------------+----------+--------------+------------------+
- | bin_log.000001 | 805 | | |
- +----------------+----------+--------------+------------------+
- 1 row in set (0.00 sec)
用笔记录二进制日志名称、以及pos点 bin-log.000001、805
解锁数据表
下载备份sql然后上传到从机上去
五、首先修改从机mysql配置文件
- vi /etc/my.cnf
- #添加代码
- server-id=2 //设置数据库id,可以随便设置。但不能重复
master-host=192.168.1.10 //主服务器的IP地址或者域名
- master-port=3306 //主数据库的端口号
- master-user=backup //同步数据库的用户
- master-password=********* //同步数据库的密码
- master-connect-retry=60 //如果从服务器发现主服务器断掉,重新连接的时间差
- master-retry-count = 999 //尝试连接次数
replicate-do-db=database //表示同步的数据库如多个,请重复添加
binlog-ignore-db=mysql //不同步mysql数据库
设定好上述参数后重启从机mysql
六、进入从机mysql、停止slave(slave开机自动启动)
更新master信息(之前配置文件中是基础数据,此处是详细配置包括后期更改master信息也可以在mysql>中进行更新,但是端口变更要修改配置文件)
- mysql> change master to #进入修改master -> master_host='192.168.1.10', #定义master地址
- -> master_user='backup', #定义备份时使用的用户
- -> master_password=’password‘, #定义备份用户的密码
- -> master_log_file='bin_log.000001', #指定从机数据在master中的二进制日志名称 -> master_log_pos=805; #指定从机数据在master中的二进制日志记录点
Query OK, 0 rows affected (0.01 sec)
更新完成,启动slave
查看slave的运行状态
- mysql> show slave status\G;
- *************************** 1. row ***************************
- Slave_IO_State: Waiting for master to send event
- Master_Host: 192.168.38.7
- Master_User: backup
- Master_Port: 3306
- Connect_Retry: 60
- Master_Log_File: bin_log.000001
- Read_Master_Log_Pos: 53229
- Relay_Log_File: localhost-relay-bin.000002
- Relay_Log_Pos: 52665
- Relay_Master_Log_File: bin_log.000001
- Slave_IO_Running: Yes 可以看到此处两个yes代表主从已经开始运行
- Slave_SQL_Running: Yes 可以做个数据测试了
- Replicate_Do_DB:
- Replicate_Ignore_DB:
- Replicate_Do_Table:
- Replicate_Ignore_Table:
- Replicate_Wild_Do_Table:
- Replicate_Wild_Ignore_Table:
- Last_Errno: 0
- Last_Error:
- Skip_Counter: 0
- Exec_Master_Log_Pos: 53229
- Relay_Log_Space: 52824
- Until_Condition: None
- Until_Log_File:
- Until_Log_Pos: 0
- Master_SSL_Allowed: No
- Master_SSL_CA_File:
- Master_SSL_CA_Path:
- Master_SSL_Cert:
- Master_SSL_Cipher:
- Master_SSL_Key:
- Seconds_Behind_Master: 0
- Master_SSL_Verify_Server_Cert: No
- Last_IO_Errno: 0
- Last_IO_Error:
- Last_SQL_Errno: 0
- Last_SQL_Error:
- 1 row in set (0.00 sec)
IO和SQL均为yes则表示连同,那么可以去测试了,到此双机热备结束。
下面简单介绍双机互备与循环备份的原理
Mysql双机互备(在完成以上的基础不要做数据库进行操作,不要对主进行读写)
原理讲解:如果slave端按照上面配置文件中进行添加那么,默认不开启二进制日志(bin-log)那么他将不产生二进制日志,也就是说slave会一直读取master的二进制日志来更新自己。那么我们就要让slave自己也产生二进制日志。
在slave端的my.cnf添加“bin-log = ”,添加完以后我们可以重启从机然后用
mysql> show master status; #查看slave端自己的master日志
然后再master的上面,进行master change to这个操作,信息都是填slave上的信息,master_log_pos是刚才查看的。
另外,如果在生产机中做双机互备,需要进行锁表,并提前做好备份,以防止数据的丢失。
在生产机当中,分两种情况
1:已经有了主从模式的情况,就需要先对主进行锁表,然后再修改slave的my.cof(添加日志功能),查看slave端的日志pos点(show master status;),然后再主上面做master change to 的操作 ,然后重启mysql即可
2:没有做主从模式的情况,第一步是先做主从,但是主的表在看完日志pos后不要解锁,一直锁着,直到从做好,然后在做从到主,最后在解锁。
适用于A↔B A→B→C(此方法还需要自己测试,然后应用到生产机)
如有问题请留言
阅读(8703) | 评论(0) | 转发(1) |