搭建mysql主从数据库实现双机热备架构


一、安装MySQL

        首先需要准备两台服务器,比如192.168.88.1(主)和192.168.88.2(从)并分别安装mysql,如果没有的话可以自己到网上去自行下载,我这边也给提供一个mysql5.6.28版本的下载地址:

 二、配置MySQL主服务器(192.168.88.1
mysql  -uroot  -p    #进入MySQL控制台
create database masterslavedb;   #建立数据库masterslavedb

insert into mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_sub
ject) values("localhost","mengxh",password("123456"),'','','');  #创建用户mengxh,密码123456

insert into mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_sub
ject) values("localhost","mengxhbak",password("123456"),'','','');

#建立MySQL主从数据库同步用户mengxhbak密码123456 

flush privileges;   #刷新系统授权表

#授权用户masterslavedbbak只能从192.168.88.2这个IP访问主服务器192.168.88.1上面的数据库,并且只具有数据库备份的权限
grant replication slave  on *.* to'mengxh'@'192.168.88.2' identified by '123456' with grantoption; 


三、把MySQL主服务器192.168.88.1中的数据库masterslavedb导入到MySQL从服务器192.168.88.2中
1、导出数据库masterslavedb

mysqldump -u root -p masterslavedb >/home/masterslavedbbak.sql    #MySQL主服务器进行操作,导出数据库masterslavedb到/home/masterslavedbbak.sql 

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

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

unlock tables;   #解除锁定

2、导入数据库到MySQL从服务器

mysql  -u root -p  #进入从服务器MySQL控制台

create database masterslavedb;   #创建数据库

use masterslavedb    #进入数据库

source  /home/masterslavedbbak.sql  #导入备份文件到数据库

mysql -u masterslavedbbak -h 192.168.88.1-p  #测试在从服务器上登录到主服务器
四、配置MySQL主服务器的my.cnf文件
vi /etc/my.cnf   #编辑配置文件,在[mysqld]部分添加下面内容
server-id=1   #设置服务器id,为1表示主服务器,注意:如果原来的配置文件中已经有这一行,就不用再添加了。
log_bin=mysql-bin  #启动MySQ二进制日志系统,注意:如果原来的配置文件中已经有这一行,就不用再添加了。
binlog-do-db=masterslavedb  #需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行
binlog-ignore-db=mysql   #不同步mysql系统数据库
service mysqld  restart  #重启MySQL
mysql -u root -p   #进入mysql控制台
show master status;  查看主服务器,出现以下类似信息
mysql> show master status;

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000002 |      868 | sparta       |                  |

+------------------+----------+--------------+------------------+

1 row in set (0.00 sec)


注意:这里记住File的值:mysql-bin.000019Position的值:7131,后面会用到。
五、配置MySQL从服务器的my.cnf文件
vi /etc/my.cnf   #编辑配置文件,在[mysqld]部分添加下面内容
server-id=2   #配置文件中已经有一行server-id=1,修改其值为2,表示为从数据库
log-bin=mysql-bin  #启动MySQ二进制日志系统,注意:如果原来的配置文件中已经有这一行,就不用再添加了。
replicate-do-db=masterslavedb   #需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行
replicate-ignore-db=mysql   #不同步mysql系统数据库
:wq!    #保存退出
service mysqld restart   #重启MySQL
注意:MySQL 5.1.7版本之后,已经不支持把master配置属性写入my.cnf配置文件中了,只需要把同步的数据库和要忽略的数据库写入即可。
mysql  -u root -p  #进入MySQL控制台
stop slave;   #停止slave同步进程
change master to master_host='192.168.88.1',master_user='mengxh',master_password='123456',master_log_file='mysql- bin.000001' ,master_log_pos=868;    #执行同步语句
start slave;    #开启slave同步进程
SHOW SLAVE STATUS\G   #查看slave同步信息,出现以下内容

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.88.1
                  Master_User: mengxh
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 868
               Relay_Log_File: mysqld-relay-bin.000002
                Relay_Log_Pos: 253
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: 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: 868
              Relay_Log_Space: 410
              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:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
1 row in set (0.00 sec)

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

六、测试MySQL主从服务器双机热备是否成功
1、进入MySQL主服务器

mysql -u root -p  #进入主服务器MySQL控制台

use masterslavedb   #进入数据库

CREATE TABLE test ( `id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(256) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;   #创建test
2、进入MySQL从服务器

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

use masterslavedb   #进入数据库

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

----------------------------------------------------------------------------------------------------------------------

以下为针对配置中可能会出现个部分情况及解决办法所做的罗列,仅供参考:

1、Slave_SQL_Running: No 此属性为No 预示着mysql同步出现故障

Slave状态如下:

mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: No
Last_Errno: 1062

原因:
1.程序可能在slave上进行了写操作 
2.也可能是slave机器重起后,事务回滚造成的.

解决办法:
1).首先停掉Slave服务:slave stop

2).到主服务器上查看主机状态:
记录File和Position对应的值。
mysql> show master status;
+------------------+-----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+-----------+--------------+------------------+
| mysql-bin.000002 | 868 | | |
+------------------+-----------+--------------+------------------+
1 row in set (0.00 sec)

3).到slave服务器上执行手动同步:
mysql>change master to master_host='192.168.88.1',master_user='mengxh',master_password='123456',master_log_file='mysql- bin.000001' ,master_log_pos=868;
1 row in set (0.00 sec)
mysql> slave start;
1 row in set (0.00 sec)
再次查看slave状态发现:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
Seconds_Behind_Master: 0

-------------------------------------------------------------------------------------------------------------------------

2、主从不能同步:

1)、show slave status;报错:Error xxx dosn't exist
且show slave status\G:
Slave_SQL_Running: NO
Seconds_Behind_Master: NULL

解决方法:
stop slave;
set global sql_slave_skip_counter =1 ;
start slave;

之后Slave会和Master去同步 主要看:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master是否为0,0就是已经同步了

2)、还需要做的一些优化与监视:
show full processlist; //查看mysql当前同步线程号
skip-name-resolve       //跳过dns名称查询,有助于加快连接及同步的速度
max_connections=1000    //增大Mysql的连接数目,(默认100)
max_connect_errors=100 //增大Mysql的错误连接数目,(默认10)

---------------------------------------------------------------------------------------------------------------------------

3、Can’t connect to local MySQL server through socket的解决方法

这种情况大多数是因为你的mysql是使用rpm方式安装的,它会自动寻找 /var/lib/mysql/mysql.sock 这个文件,
通过unix socket登录mysql。
常见解决办法如下:
1)、创建/修改文件 /etc/my.cnf,至少增加/修改一行
[mysql]
[client]
socket = /tmp/mysql.sock
#在这里写上你的mysql.sock的正确位置,通常不是在 /tmp/ 下就是在 /var/lib/mysql/ 下

2)、指定IP地址,使用tcp方式连接mysql,而不使用本地sock方式
#mysql -h127.0.0.1 -uuser -ppassword

3)、为 mysql.sock 加个连接,比如说实际的mysql.sock在 /tmp/ 下,则
#ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock即可

以上三种是针对这个问题的常规解决方法,但如果mysql.sock文件根本不存在或被删除的情况下可以在linux下执行mysqld_safe命令即可

--------------------------------------------------------------------------------------------------------------------------------------

至此,MySQL数据库配置主从服务器实现双机热备的配置已完成,以上配置根据不同的服务器,不同的平台可能会略有差异,如有不一致的情况还请各位多多指正,谢谢!

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值