在UNIX系统下安装MySQL

2008-02-23 07:42:07来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

在Soundbreak我们每天24小时不间断地播放实况音频和视频,所以对于MySQL的新增的复制特性,我们不能做出很令人信服的测试。通过测试我们发现,能够使用这个特性来和备份数据库服务器保持数据同步,这样当主服

在这篇文章的剩下篇幅中,我将指定两台服务器。A(IP为10.1.1.1)作为主服务器(简称为主机)。B(IP为10.1.1.2)作为后备服务器(简称为备机)。

MySQL的复制功能的实现过程为:备机(B)和主机(A)连接,然后读出主机的二进制更新日志,再将发生的变化合并到自已的数据库中。备机需要一个用户帐号来和主机连接,所以在主机上创建一个帐号,并只给他FILE权限,如下操作:

GRANT FILE ON *.* TO replicate@10.1.1.2 IDENTIFIED BY 'password';

为了备机能够和主机连接,要在主机上运行'FLUSH PRIVILEGES',但是不要担心,因为我们将在下面的步骤中停掉服务器。

现在我们需要主机数据库的一个快照,并且对主机进行配置,允许生成二进制的更新日志。首先编辑'my.cnf'文档,以便允许二进制更新日志,所以在[mysqld]部分的下面某个地方增加一行:'log-bin'。在下一次服务器启动时,主机将生成二进制更新日志(名为:<主机名>-bin.<增量序号#>)。为了让二进制更新日志有效,关闭MySQL服务程式,然后将主机上的任何数据库目录到另一个目录中,接着重新启动mysqld。

请确定得到了任何数据库,否则在进行复制时,假如一个表在主机上存在但在备机上不存在,将因为出错而退出。现在您已得到了数据的快照,和一个从建立快照以来的二进制日志,上面记录着任何对数据库的修改。请注意MySQL数据文档(*.MYD,*.MYI和*.frm)是依赖于文档系统的,所以您不能仅仅进行文档传输,如从Solaris到Linux。假如您处于一个异种的服务器环境,您将不得不使用mysqldump实用程式或其他的定制脚本来得到数据快照。

第二步:配置备机

让我们继续。停掉备机上的MySQL服务程式,并且把从主机上拷贝来的数据库目录移到备机上的data目录下。请确认将目录的拥有者和属组改变为MySQL用户相应值,并且修改文档模式为660(只对拥有者和属组可读、可写),目录本身为770(只对拥有者和属组可读、可写和可执行)。

继续。在备机上启动MySQL服务程式,确认MySQL工作正常。运行几个select查询(不要update或insert查询),看一看在第一步中得到的数据快照是否成功。接着,在测试成功后关掉MySQL服务程式。

在备机上配置需要访问的主机,以便接收主机的更改。所以需要编辑务机上的'my.cnf'文档,在[mysqld]部分中增加下面几行:

master-host=10.1.1.1

master-user=replicate

master-password=password

在启动备机服务程式后,备机服务程式将查看在'my.cnf'文档中所指定的主机,查看是否有改变,并且将这些改变合并到自已的数据库中。备机保持了主机的更新记录,这些记录是从主机的'master.info'文档中接收下来的。备机线程的状态能够通过sql命令'SHOW SLAVE-STATUS'看到。在备机上处理二进制日志中假如

发生错误,都将导致备机线程的退出,并且在*.err的日志文档中生成一条信息。然后错误能够被改正,接着能够使用sql语句'SLAVE START'来重新启动备机线程。线程将从主机二进制日志处理中断的地方继续处理。

至此,在主机上所发生的数据改变应该已复制到备机上了,要测试他,您能够在主机上插入或更新一条记录,而在备机上选择这条记录。

现在我们拥有了从A机到B机的这种主-从关系,这样当A机可能当机的时候,允许我们将任何的查询重定向到B机上去,但是当A机恢复时,我们没有办法将发生的改变恢复到A机中去。为了解决这个问题,我们创建从B机到A机的主-从关系。

第三步:创建相互的主从关系

首先在B机上的my.cnf文档中,在[mysqld]部分中加入'log-bin',接着重新启动mysqld,然后创建可在

他的上面执行复制功能的用户帐号,使用:

GRANT FILE ON *.* TO replicate@10.1.1.1 IDENTIFIED BY 'password';

在B机上运行'FLUSH PRIVILEGES'命令,以便装入在加入复制用户后的新的授权表,接着回到A机上,在

他的'my.cnf'中加入下面几行:

master-host=10.1.1.2

master-user=replicate master-password=password

在重启A机的服务程式之后,现在我们一拥有了在A机和B机之间的相互主-从关系。不管在哪个服务器上 更新一条记录或插入一条记录,都将被复制到另一台服务器上。要注意的是:我不敢确定一个备机合并二进 制日志变化的速度有多快,所以用这种方法来进行插入或更新语句的负载平衡可能不是个好办法。

第四步:修改您的数据库连接程式 既然您已在A机和B机之间建立了一个相互的关系,您需要修改数据库连接程式,以便从这种方式中得 到好处。下面的函数首先试图和A机连接,假如不能建立连接则和B机连接。

/******************************************************** function db_connect()

returns a link identifier on success, or false on error ********************************************************/ function db_connect(){ $username = "replUser"; $password = "password"; $primary = "10.1.1.1"; $backup = "10.1.1.2";

# attempt connection to primary if(!$link_id = @mysql_connect($primary, $username, $password)) # attempt connection to secondary $link_id = @mysql_connect($secondary, $username, $password) return $link_id; }

?>

我在两种情况下对使用了上面技术的数据库连接建立过程进行了测试,一种是主MySQL服务程式关闭了, 但是服务器还在运行,另一种情况是主服务器关闭了。假如只是mysqld关闭了,连接会马上转向备机;但是 假如整个服务器关闭了,就出现了无限地等待(两分钟后我放弃了跟踪 -- 很短的注意跨度),因为PHP在查 找一个不存在的服务器。不幸地是,不象fsockopen函数,mysql_connect函数没有一个超时参数,然而我们 能够使用fsockopen来模拟一个超时处理。

第五步:一个改进的数据库连接程式

/******************************************************** function db_connect_plus()

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 配置

下一篇: MySQL下数据备份系统解决方案