mysql 双机热备

环境说明

1.MySQL主服务器

系统:CentOS 6.5

IP:192.168.178.3

主机名:oracle.com

MySQL版本:14.14

2.MySQL从服务器

系统:CentOS 6.5

IP:192.168.178.5

主机名:l.com

MySQL版本:14.14

备注:作为主从服务器的MySQL版本建议使用同一版本!或者必须保证主服务器的MySQL版本要高于从服务器的MySQL版本(MySQL版本是向下兼容的)

前提:

1.关闭IPTABLES防火墙,实验成功后可开启并设置策略。

service iptables stop

2.关闭SELINUX,并重启系统。或者临时关闭不重启系统。

vi /etc/selinux/config

#SELINUX=enforcing     #注释掉

#SELINUXTYPE=targeted  #注释掉

SELINUX=disabled  #增加

一、安装MySQL(两台服务器都要安装,必须的),并且设置开机自启动。

yum -y install mysql*	

二、配置MySQL主服务器

mysql -uroot –p  #进入MySQL控制台
insert into mysql.user(Host,User,Password) values('localhost','backuser',password('123456')); #创建备份用户设置密码
flush privileges; #刷新系统授权表
grant replication slave  on *.* to 'backuser'@'192.168.178.5' identified by '123456' with grant option; #授权备份用户只有备份的权限并且只能在192.168.178.5主机登录

三、将主服务器上要求主从同步的数据库放到从服务器上

1.备份主服务器数据库

mysqldump -u root -p'123456' blog > ~/blog.sql  #将blog数据库备份到家目录下

注:在导出之前可以先进入MySQL控制台执行下面命令

flush tables with read lock; #数据库只读锁定命令,防止导出数据库的时候有数据写入
unlock tables; #解除锁定

2.在从服务器上把数据库还原

mysql -uroot -p
create database blog; #创建blog数据库
use blog;   #使用blog数据库
source ~/blog.sql; #还原数据库
flush privileges;

3.测试在从服务器上登录到主服务器

mysql -u backuser -h 192.168.178.3 –p’123456’;

四、配置MySQL主服务器的my.cnf文件

vi /etc/my.cnf   #编辑配置文件,在[mysqld]部分添加下面内容
server-id=1   #设置服务器id,为1表示主服务器,注意:如果原来的配置文件中已经有这一行,就不用再添加了。
log-bin=mysql-bin  #启动MySQ二进制日志系统,注意:如果原来的配置文件中已经有这一行,就不用再添加了。
binlog-do-db=blog  #需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行
binlog-ignore-db=mysql   #不同步mysql系统数据库
:wq!   #保存退出
service mysqld  restart  #重启MySQL
mysql -u root -p   #进入mysql控制台
show master status;  #查看主服务器,出现以下类似信息
+------------------+----------+--------------+------------------+
| File                        | Position  | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |    227   | blog    | mysql                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
注意:这里记住File的值:mysql-bin.000001和Position的值:0016,后面会用到。

五、配置MySQL从服务器的my.cnf文件

vi /etc/my.cnf   #编辑配置文件,在[mysqld]部分添加下面内容
server-id=2   #配置文件中已经有一行server-id=1,修改其值为2,表示为从数据库
log-bin=mysql-bin  #启动MySQ二进制日志系统,注意:如果原来的配置文件中已经有这一行,就不用再添加了。
replicate-do-db=blog   #需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行
replicate-ignore-db=mysql   #不同步mysql系统数据库
:wq!    #保存退出
service mysqld restart   #重启MySQL

注意:MySQL 5.1.7版本之后,已经不支持把master配置属性写入my.cnf配置文件中了,只需要把同步的数据库和要忽略的数据库写入即可。

mysql  -u root -p  #进入MySQL控制台
slave stop;   #停止slave同步进程
change master to master_host='192.168.178.3',master_user='backuser',master_password='123456',master_log_file='mysql-bin.000001' ,master_log_pos=0016;    #执行同步语句
slave start;    #开启slave同步进程
show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.178.3
                  Master_User: backuser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 227
               Relay_Log_File: mysqld-relay-bin.000002
                Relay_Log_Pos: 372
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: blog
          Replicate_Ignore_DB: mysql
           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: 227
              Relay_Log_Space: 528
              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)

ERROR: 
No query specified

注意查看:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
以上这两个参数的值为Yes,即说明配置成功!

六、测试

1.MySQL主服务器

mysql -u root -p  #进入MySQL控制台

use blog;   #进入数据库

CREATE TABLE test ( id int not null primary key,name char(20) );   #创建test表

2.MySQL从服务器

mysql -u root -p  #进入MySQL控制台

use blog;   #进入数据库

show  tables;  #查看blog表结构,会看到有一个新建的表test,表示数据库同步成功

七、防火墙配置

vi /etc/sysconfig/iptables   #编辑防火墙配置文件

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

/etc/init.d/iptables restart  #重启防火墙,使配置生效

 

二〇一五年三月二十日 13:05:18

THE END