具体的什么叫热备,热备的原理在这我就不多讲了,网上有很多讲原理的文章,在此我主要讲下实现的步骤。本人亲测的步骤,也主要是为了防止以后忘记。不多说了,进入正题:
一、建立主-从服务器双机热备配置步骤
1,准备工作
- 配置两台服务器,例如IP地址分别是:192.168.51.119(主)和192.168.51.120(从) 两台服务器
- 在两台服务器上分别安装Mysql(版本最好一致,本人测试时安装的版本是5.7。有文章说从服务器只要不低于主服务器版本就可以,本人没有测试过。我是在两台服务器上装了相同安装包的Mysql,这样绝对一致了,呵呵)。
- 准备一个需要同步的数据库,例如:数据库名:mytest(这里要说明下,同步只是对以后的操作同步。如果在启动热备之前两个数据库就不一致,那样他们仍然会保留不一致的状态。在热备之后如果操作了这些不一致的数据,就会造成热备失败,热备也就停止工作了。所以强烈建议在启动热备之前,保证两个数据库绝对一致!!
2,主服务器配置(Master)
2.1,在主服务器上为从服务器建立一个连接账户,该帐户必须授予REPLICATION SLAVE权限。
mysql> grant replication slave,super,reload on *.* to forslave@192.168.51.120 identified by '123456';
mysql> flush privileges;
创建好同步连接帐户后,我们可以通过在从服务器(Slave)上用forslave帐户对主服务器(Master)数据库进行访问,看下是否能连接成功。
在从服务器(Slave)上输入如下指令:
[root@YD146 ~]# mysql -h192.168.51.119 -urforslave -p123456
如果出现下面的结果,则表示能登录成功,说明可以对这两台服务器进行双机热备进行操作。
2.2,对主数据库服务器配置文件进行配置:进入主数据库服务器安装目录,打开my.ini,在文件末尾增加如下配置:
#数据库ID号, 为1时表示为Master,其中master_id必须为1到232–1之间的一个正整数值;
server-id = 1
#启用二进制日志;
log-bin=mysql-bin
#需要同步的二进制数据库名;
binlog-do-db=tync_test
#不同步的二进制数据库名,如果不设置可以将其注释掉;
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
#设定生成的log文件名;
log-bin="D:/Database/materlog"
#把更新的记录写到二进制文件中;
log-slave-updates
2.3,修改完成后,重启mysql服务。
2.4,查看主服务器状态
进入mysql服务后,可通过指令查看Master状态,输入如下指令:
mysql> show master status\G
注意看里面的参数,特别前面两个File和Position,在从服务器(Slave)配置主从关系会有用到的。
3,从服务器配置(Slave)
因为这里面是以主-从方式实现mysql双机热备的,所以在从服务器就不用在建立同步帐户了,直接打开配置文件my.ini进行修改即可,道理还是同修改主服务器上的一样,只不过需要修改的参数不一样而已。如下:
3.1,对从数据库服务器配置文件进行配置:
[mysqld]
server-id = 2
log-bin=mysql-bin
replicate-do-db = tync_test
replicate-ignore-db = mysql,information_schema
3.2,修改完成后,重启mysql服务。
3.3,用change mster 语句指定同步位置(非常重要)
这步是最关键的一步了,在进入mysql操作界面后,输入如下指令:
mysql>stop slave; //先停步slave服务线程,这个是很重要的,如果不这样做会造成以下操作不成功。
mysql>change master to
>master_host='192.168.51.119',master_user='forslave',master_password='123456',
>master_log_file='materlog.00001',master_log_pos=710;
注:master_log_file, master_log_pos由主服务器(Master)查出的状态值中确定。也就是刚刚叫注意的。master_log_file对应File, master_log_pos对应Position。Mysql 5.x以上版本已经不支持在配置文件中指定主服务器相关选项。
遇到的问题,如果按上面步骤之后还出现如下情况:
则要重新设置slave。指令如下
mysql>stop slave;
mysql>reset slave;
mysql>start slave;
3.4,查看从服务器状态
mysql> show slave status\G
查看下面两项值均为Yes,即表示设置从服务器成功。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
3.5,解决以上两个状态不是YES的情况
Slave_IO_Running: No 产生原因不详,解决方法是:
mysql>stop slave;
mysql>reset slave;
mysql>start slave;
我是这么就解决了,大家如果试了还是不行,大家就自行Google吧。
Slave_SQL_Running: No 一般情况是主服务器上的SQL语句在从服务器上执行不成功产生了错误,造成热备失败。比如:主服务器删除一个id为3的数据,而从服务器上没有id为3的数据,这样就会出现Slave_SQL_Running: No。 这个错误会有错误提示,通过show slave status\G命令就能查看到,找到原因后,解决响应的问题,比如在从服务器上增加一条id为3的数据,就可以了。解决好问题后,执行
mysql> stop slave;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave;
只要问题找对,系统就可以重新把出错后没有同步的数据重新同步好。Slave_SQL_Running 的状态自然也变为:Yes