mysql备份机_mysql双机实时备份(已成功进行库备份)

本文详细介绍了在Unix/Linux和Windows环境下MySQL的主从复制配置,包括my.cnf文件的修改、权限设置、日志配置以及故障诊断方法。通过设置master和slave,实现数据同步,并讨论了双机互备模式。重点强调了配置过程中的关键步骤和可能出现的问题,以及如何通过showmasterstatus、showslavestatus等命令进行故障排查。
摘要由CSDN通过智能技术生成

在unix环境下在/etc/mysql/my.cnf或者在mysql用户的home目录下面的my.cnf。

window环境中,如果c:根目录下有my.cnf文件则取该配置文件。当运行mysql的winmysqladmin.exe工具时候,该工具会把c:根目录下的my.cnf命名为mycnf.bak。并在winnt目录下创建my.ini。mysql服务器启动时候会读该配置文件。所以可以把my.cnf中的内容拷贝到my.ini文件中,用my.ini文件作为mysql服务器的配置文件。

unix/linux环境下,就修改/etc/mysql/my.cnf然后/usr/local/mysql/share/mysql/mysql server restart就可以了。

我的测试环境:

操作系统:redhat AS 3

mysql:mysql-4.0.17.

A ip:192.168.0.90

B ip:192.168.0.99

A:设置

1.增加一个用户最为同步的用户帐号:

GRANT all privilegesON *.* TO backup@'192.168.0.99' IDENTIFIED BY ‘1234’

B:设置

1.增加一个用户最为同步的用户帐号:

GRANTreplication slaveON *.* TO backup@'192.168.0.90' IDENTIFIED BY ‘1234’

说明:上面的all privileges在4.0版上应该为replication slave,也就是grant replication slave on........在0.99上是file,也就是grant file on ........但是我怕有别的麻烦,干脆权限全给好啦. 在进行如上设置之后,可以看出在192.168.0.99设定好并重启mysql以后,mysql会在数据目录(/var/lib/mysql)下生成一个master.info文件和relay-log.info,relay-log.index文件.如果要更改master服务器,则要删除掉这个文件,(即在更改了/etc/my.cnf中master相关信息)在my.cnf文件中重新配置,重新启动mysql,更改才会生效.

.主从模式:A->B

A为master

修改A mysql的my.ini文件。在mysqld配置项中加入下面配置:

server-id=1

log-bin

#设置需要记录log可以设置log-bin=/var/mysqllog设置日志文件的目录,

#其中mysqllog是日志文件的名称,mysql将建立不同扩展名,文件名为mysqllog的几个日志文件。

binlog-do-db=test #指定需要日志的数据库

这样,mysql会在数据目录放置test这个库的更新日志。等待备机来抓取

重起数据库服务。

用show master status命令看日志情况。

B为slave

修改B mysql的my.ini文件。在mysqld配置项中加入下面配置:

server-id=2

master-host=192.168.0.90

master-user=backup #同步用户帐号

master-password=1234

master-port=3306

master-connect-retry=10预设重试间隔10秒

replicate-do-db=test告诉slave只做backup数据库的更新log-bin

binlog-do-db=test客户端会到服务器抓取test库的更新日志,来更新本地的test库

重起数据库

用show slave status看同步配置情况。

注意:由于设置了slave的配置信息,mysql在数据库目录下生成master.info

所以如有要修改相关slave的配置要先删除该文件。否则修改的配置不能生效。

双机互备模式。

如果在A加入slave设置,在B加入master设置,则可以做B->A的同步。

在A的配置文件中mysqld配置项加入以下设置:

master-host=192.168.0.99

master-user=backup

master-password=1234

replicate-do-db=backup

master-connect-retry=10

在B的配置文件中mysqld配置项加入以下设置:

log-bin

binlog-do-db=backup

注意:当有错误产生时*.err日志文件。同步的线程退出,当纠正错误后要让同步机制进行工作,运行slave start

重起AB机器,则可以实现双向的热备。

对于故障诊断,我的方法是都在在slave上.那么slave上是如何工作的呢?

Slave上Mysql的Replication工作有两个线程,I/O thread和SQL thread,I/O 的作用是从master 3306端口上把它的binlog取过来(master在被修改了任何内容之后,就会把修改了什么写到自己的binlog等待slave更新),然后写到本地的relay-log,而SQL thread则是去读本地的relay-log,再把它转换成本Mysql所能理解的东西,于是同步就这样一步一步的完成.决定I/O thread的是/var/lib/mysql/master.info,而决定SQL thread的是/var/lib/mysql/relay-log.info.

请注意,因为上边提到了binlog里的内容是改了什么东东,而不是改了以后是什么东东,所以在进行同步之前必须保证两个数据库是完全相同的,不然可能出错.打个比方来说.A机上有一个表里的元组为2,而操作是减一,则binlog只会记录减一这个操作,如果B机上没有,那么则无法得到同步,因为B机没有这个字段,就不知道减一是什么操作.

对于故障诊断,我的方法是都在slave(master/slave是相对的)的mysql(指客户端)里完成.

方法一:show slave status;

正确情况下应该同如下类似:

mysql> show slave status;

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

| Master_Host| Master_User | Master_Port | Connect_retry | Master_Log_File| Read_Master_Log_Pos | Relay_Log_File| Relay_Log_Pos | Relay_Master_Log_File | Slave_IO_Running | Slave_SQL_Running | Replicate_do_db | Replicate_ignore_db | Last_errno | Last_error | Skip_counter | Exec_master_log_pos | Relay_log_space |

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

| 192.168.0.90 | backup| 3306| 10| localserver1-bin.001 | 957| server-relay-bin.005 | 613| localserver1-bin.001| Yes| Yes| test|| 0|| 0| 957| 613|

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

1 row in set (0.00 sec)

上边的server1和Server是两台机器的主机名,所以真实情况应该有所分别,注意其中的YES|YES,这个是本地I/O线程及SQL线程的工作状态,要确

保都为YES,如果不是YES,请检查mysql是否正常运行.

方法二:show processlist;

如果正确,则应该如下所示:

mysql> show processlist;

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

| Id | User| Host| db| Command | Time| State| Info|

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

|1 | system user || NULL | Connect | 2511| Waiting for master to send event| NULL|

|2 | system user || NULL | Connect | 4294906139 | Has read all relay log; waiting for the I/O slave thread to update it | NULL|

|3 | root| localhost | test | Query| 0| NULL| show processlist |

|4 | root| localhost | test | Sleep| 1478|| NULL|

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

4 rows in set (0.00 sec)

注意同标记过的字符类似,则是正确的,错误情况下应该是这个样子:

mysql> show processlist;

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

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

| Id | User | Host | db | Command | Time | State | Info |

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

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

| 4 | system user | | NULL | Connect | 454 | Reconnecting after a failed master event read | NULL |

| 5 | system user | | NULL | Connect | 454 | Has read all relay log; waiting for the I/O slave thread to update it | NULL |

| 7 | root | localhost | NULL | Query | 0 | NULL | show processlist |

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

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

3 rows in set (0.00 sec)

当然如果这里的Reconnecting只是错误的一种,有可能是connecting,则表示正在连接,那么请检查:

1 master上的mysql daemon是否正常运行

2 master与slave的网络连接是否正常

3 my.cnf是否配置正确

4 在修改配置后是否删除过master.info?(删掉以后会自动再生成一个,别担心删掉),因为如果不删掉的话,那么则还是使用原来的配置

5 修改配置后有没有重新启动mysql daemon,重新启动过程后必须证实mysql已经正常启动

6 master上给slave及slave给master上分配的replication用户权限是否正确,master的主机名和dns设置

7 当前状况两台数据库是否完全相同.

方法三:show master status;

mysql> show master status;

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

| File | Position | Binlog_do_db | Binlog_ignore_db |

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

| Server1-bin.021 | 79 |test | |

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

1 row in set (0.00 sec)

注意上边的这条,position不能为0,如果为0则表示有问题,请检查/etc/my.cnf中的server-id及是否打开log-bin

mysql> show processlist;

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

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

| Id | User | Host | db | Command | Time | State | Info |

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

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

| 1 | backup | 192.168.0.99:32996 | NULL | Binlog Dump | 284 | Has sent all binlog to slave; waiting for binlog to be

updated | NULL |

| 3 | root | localhost | NULL | Query | 0 | NULL | show processlist |

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

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

2 rows in set (0.00 sec)

如果master上不是这样,那么就应该是master的配置有问题啦.

方法四 查看错误日志

在/usr/local/mysql/var下有个 localhost.err 文件,所有的错误都在其中被记录

ps:

至于多机热备怎么做?

我G和B了网上教程说到“将几台mysql服务器像首尾相连的蛇,组成一个环装,就可以了,而且还可以作几个单向的更新,用以分担select这样的读取操作的压力” 具体偶也没做过,不太清楚。有网友有成功案例的请分享。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值