Chinaunix首页 | 论坛 | 博客
  • 博客访问: 243401
  • 博文数量: 29
  • 博客积分: 634
  • 博客等级: 上士
  • 技术积分: 432
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-09 22:24
文章分类

全部博文(29)

文章存档

2012年(8)

2011年(21)

分类: Mysql/postgreSQL

2011-03-15 18:05:31

    开门见山,首先,主服务器的mysql版本不能高于从服务器的版本 ,可以是一样的,其次端口号必须统一。
    好了,现在开始配置双机热备(随后将会提到循环备份以及互备)我使用的版本为redhat5.4两台ip为192.168.1.10、192.168.0.11,备份数据库为test。
    热备中数据库分类:master主数据库、slave从数据库
    一、两台mysql均可以在本地登录,并设定好密码,打开防火墙3306端口否则,无法进行通讯。
  1. vi /etc/sysconfig/iptables
  2. #在里面添加3306端口
  3. -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
  4. :wq

   二、在主数据库中添加用于备份的账号

 

  1. mysql> GRANT REPLICATION SLAVE ON *.* #注意 这里是星号

  2.     -> TO "backupUser"@"IP" IDENTIFIED BY "password";

    backupUser填写建立的用户名,IP为从服务器IP,password就不用说了吧~

    三、修改主服务器的my.cnf在配置文件中添加

 

  1.     server-id=1 #数据库id,默认1
  2.     log-bin=log-bin #日志文件的名称,这里可以制定日志到别的目录 如果没有设置则默认主机名的一个日志名称
  3.     binlog-do-db=db_name #记录日志的数据库 ,可选
  4.     binlog-ignore-db=mysql #不记录日志的数据库 可选

log-bin是mysql产生的二进制日志,热备份就是读取二进制日志使数据得到时时同步,建议在binlog-ignore中添加mysql这个库,因为在我测试中这个库也被同步过来了,所以...你懂得

    四、重启服务器载入新配置文件

    进入数据库

  1. mysql -uroot -p
  2. password:
  锁定数据库
  1. mysql> FLUSH TABLES WITH READ LOCK;
  备份所需要的数据表
  1. mysqldump -uroot -ppassword test > /home/backup/mysql/test.sql
  2. #如果有多个就备份多个

锁定数据库是为了准备记录二进制日志的记录点,否则会在从机配置的时候不能正常读取二进制日志

查看在锁定数据库时二进制日志的记录点

  1. mysql> show master status;
  2. +----------------+----------+--------------+------------------+
  3. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  4. +----------------+----------+--------------+------------------+
  5. | bin_log.000001 | 805 | | |
  6. +----------------+----------+--------------+------------------+
  7. 1 row in set (0.00 sec)

用笔记录二进制日志名称、以及pos点  bin-log.000001、805

解锁数据表

 

  1. mysql> UNLOCK TABLES;

下载备份sql然后上传到从机上去

    五、首先修改从机mysql配置文件

 

  1. vi /etc/my.cnf
  2. #添加代码
  3.     server-id=2 //设置数据库id,可以随便设置。但不能重复
  4.      master-host=192.168.1.10 //主服务器的IP地址或者域名
  5.     master-port=3306 //主数据库的端口号
  6.     master-user=backup //同步数据库的用户
  7.     master-password=********* //同步数据库的密码
  8.     master-connect-retry=60 //如果从服务器发现主服务器断掉,重新连接的时间差
  9.        master-retry-count = 999 //尝试连接次数
  10.       
           replicate-do-db=database      //表示同步的数据库如多个,请重复添加
 
           binlog-ignore-db=mysql   //不同步mysql数据库

    设定好上述参数后重启从机mysql

    六、进入从机mysql、停止slave(slave开机自动启动)

  1. mysql> slave stop;
    更新master信息(之前配置文件中是基础数据,此处是详细配置包括后期更改master信息也可以在mysql>中进行更新,但是端口变更要修改配置文件)
  1.    mysql> change master to               #进入修改master                                 -> master_host='192.168.1.10',         #定义master地址
  2.     -> master_user='backup',               #定义备份时使用的用户
  3.     -> master_password=’password‘,         #定义备份用户的密码
  4.     -> master_log_file='bin_log.000001',   #指定从机数据在master中的二进制日志名称             -> master_log_pos=805;                 #指定从机数据在master中的二进制日志记录点
    Query OK, 0 rows affected (0.01 sec)
更新完成,启动slave
  1. mysql> slave start;

查看slave的运行状态

 

  1. mysql> show slave status\G;
  2. *************************** 1. row ***************************
  3.                Slave_IO_State: Waiting for master to send event
  4.                   Master_Host: 192.168.38.7
  5.                   Master_User: backup
  6.                   Master_Port: 3306
  7.                 Connect_Retry: 60
  8.               Master_Log_File: bin_log.000001
  9.           Read_Master_Log_Pos: 53229
  10.                Relay_Log_File: localhost-relay-bin.000002
  11.                 Relay_Log_Pos: 52665
  12.         Relay_Master_Log_File: bin_log.000001
  13.              Slave_IO_Running: Yes                可以看到此处两个yes代表主从已经开始运行
  14.             Slave_SQL_Running: Yes                可以做个数据测试了
  15.               Replicate_Do_DB:
  16.           Replicate_Ignore_DB:
  17.            Replicate_Do_Table:
  18.        Replicate_Ignore_Table:
  19.       Replicate_Wild_Do_Table:
  20.   Replicate_Wild_Ignore_Table:
  21.                    Last_Errno: 0
  22.                    Last_Error:
  23.                  Skip_Counter: 0
  24.           Exec_Master_Log_Pos: 53229
  25.               Relay_Log_Space: 52824
  26.               Until_Condition: None
  27.                Until_Log_File:
  28.                 Until_Log_Pos: 0
  29.            Master_SSL_Allowed: No
  30.            Master_SSL_CA_File:
  31.            Master_SSL_CA_Path:
  32.               Master_SSL_Cert:
  33.             Master_SSL_Cipher:
  34.                Master_SSL_Key:
  35.         Seconds_Behind_Master: 0
  36. Master_SSL_Verify_Server_Cert: No
  37.                 Last_IO_Errno: 0
  38.                 Last_IO_Error:
  39.                Last_SQL_Errno: 0
  40.                Last_SQL_Error:
  41. 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) |
0

上一篇:没有了

下一篇:redhat5.4更改免费yum源

给主人留下些什么吧!~~