中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 数据库开发 > 数据库综合
mysql replication方案
作者:未知 时间:2005-09-13 23:43 出处:Blog.ChinaUnix.net 责编:chinaitpower
              摘要:mysql replication方案
mysql 制作同步数据库的步骤,转载自网中人所写。

mysql 制作同步数据库的步骤,转载自网中人所写。
我们需要的是"异地备援"的机制,我们花了一个多月的时间从构思到设定、实作、测试 ....

数换主机之后,终于完成了一个初步的架构。

 

为此特地将我们的心得提供给大家参考,并希望能得到更多的朋友帮忙改良。

 

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

一﹐假设环境

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

 

1) 一台主 phorum 主机(master)1.2.3.4

2) 一台能提供 ddns update  DNS 主机:1.2.3.5

3) 一台次 phorum 主机(slave) 4.3.2.1

4) phorum 使用的 FQDN 为:phorum.my.org

 

 

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

二﹐构思

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

 

1) 正常情况下,phorum 跑在 master

    然后启动 mysql 的双向 replication 

    但两个 phpbb 都使用 master  mysql ( config.php )

    phpbb 本身的 code  rsync+ssh 来同步。

2)  slave 这边,用 nmap  60 秒来扫 port 80  3306

    若两个 port 都扫到,不作任何变动。

3) 若其一扫不到,将作出如下动作:

    1,  email 通知 mail list

    2, 修改 phpbb 使用本机的 mysql

    3,  ddns  phorum  IP 改到 slave

    4,  20 秒再用 nmap 来扫 master  port

4)  master 回来后,将作出如下动作:

    1,  email 通知 mail list

    2, 修改 phpbb 使用 master  mysql

    3,  ddns  phorum 改到 master

    4,  60 秒再用 nmap 来扫 master port 80 (循环动作 2 )

 

 

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

三﹐前提条件

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

 

1) 您会设定及使用 ssh/scp ,还有 ssh  RSA 认证

2) 您会设定 bind v9  policy update (ddns)

3) 您会设定 mysql  replication

4) 您会修改 shell script (bash)

 

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

四﹐开始实作

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

 

4.1﹐设定 SSH

 

1)  slave 挑选一个账号( kenny),确定对整个 phpBB 目录有"写入"权限,

    且能够从 master  ssh 进来(预设如此,除非您修改了)。并执行:

        $ mkdir ~/.ssh 2>/dev/null

        $ chmod 700 ~/.ssh

        $ touch ~/.ssh/authorized_keys

        $ chmod 644 ~/.ssh/authorized_keys

 

2)  master 上选一个能读取 phpBB 目录且能跑 crontab 的账号(netman)

   (注:若不用 root 的话,建议为 phpBB 目录的 owner)

    并用该身份鹖獢G

        $ ssh-keygen -t rsa

        (按三下 enter 完成﹔不需设密码,除非您会用 ssh-agent )

 

3)  master  RSA key 搬进 slave 那边去:

        $ scp /home/netman/.ssh/id_rsa.pub kenny@4.3.2.1:/home/kenny/id_rsa.pub.1.2.34

               (输入密码﹔若是第一次联机,在输入密码之前还需输入 yes 三字。)

        $ ssh kenny@4.3.2.1 'cat /home/kenny/id_rsa.pub.1.2.3.4 >> /home/kenny/.ssh/authorized_keys'

               (再输入密码)

        $ ssh kenny@4.3.2.1 'rm /home/kenny/id_rsa.pub.1.2.3.4'

               (这次确定"不需"输入密码﹗若不成功,请参考 ssh 的文件完成。)

 

** 注:上述步骤也可参考如下网页的部份内容:

        http://www.study-area.org/tips/vpn.htm

 

 

4.2﹐同步 phpBB 

 

* 此步骤不是必需的,若因其它目的不想想同步双方的 phpbb 设定,那可略过。

 

1) 请再次确定您在 slave 使用的账号(这里为 kenny) phpBB 目录有写入权限,

   (具体路径请自行修改)

        $ touch /home/phpbb/www/phpBB/new.text

        $ rm /home/phpbb/www/phpBB/new.text

        $ mv /home/phpbb/www/phpBB /home/phpbb/www/phpBB.bak

  

2) 用前述账号(这里为 netman)登入 master 主机上,执行 rsync 同步 phpBB

        $ rsync -e ssh -zav /home/phpbb/www/phpBB kenny@4.3.2.1:/home/phpbb/www

        (1:来源路径请打 "/home/phpbb/www/phpBB",也就是最后的路径不能带 "/" )

        (2:目标路径请打 "/home/phpbb/www",也就是指到 phpBB 的上一级目录﹗)

 

3) 请到 slave 端验证同步是否成功﹔否则,请参考 rsync 文件来完成。

 

4)  master 上用前述账号写一个 crontab ,定期更新:

        $ crontab -e

        1 */4 * * * /usr/bin/rsync -e ssh -zav /home/phpbb/www/phpBB kenny@4.3.2.1:/home/phpbb/www

这样,一天会同步 6 次﹔若需调整时间间隔,请参考 crontab 文件。

 

 

4.3﹐设定 DDNS

 

1)  root 身份登入 DNS 主机,并产生 key pair

        # mkdir ~/tmp

        # cd ~/tmp

        # dnssec-keygen -a HMAC-MD5 -b 128 -n HOST phorum

               Kphorum.+157+01326

 

2) 获取 key 内容:

        # tail -1  Kphorum.+157+01326.key | awk '{print }'

               rTlaRxINDDD/#zUlnPadsfWA==

        并请抄下来(小心别抄错﹗大小写是不同的哦~~~)

        (您也可自行打开 Kphorum.+157+01326.key 来复制)

 

3) 修改 /etc/named.conf ,并增加/修改如下句子:

        

  key "phorum" {

        algorithm hmac-md5;

        secret "rTlaRxINDDD/#zUlnPadsfWA==";

};

 

zone "my.org" {

        type master;

        file "named.my.org";

        update-policy {

                grant phorum name phorum.my.org. A;

        };

};

 

并重新启动 named 

        # /etc/rc.d/init.d/named restart

        (一定要看 /var/log/messages 确定没有 error 出现﹗)

 

4) 将产生的 key-pair 抄至 slave 

        # scp Kphorum.+157+01326.* kenny@4.3.2.1:/home/kenny

               (输入密码﹔若是第一次联机,在输入密码之前还需输入 yes 三字。)

 

5) 转至 slave 主机,并以前面所用的账号(这里为 kenny)登入,测试 ddns 

        $ cd

        $ host phorum.my.org

               (以确定您看到的 ip  master )

        $ nsupdate -k  Kphorum.+157+01326.key 

        > server 1.2.3.5

        > update delete phorum.my.org A 

        > update add phorum.my.org 0 A 4.3.2.1

        > send 

        > ^d  (按下 crtl  d )

        $ host phorum.my.org

               (确定您看到的 ip  slave 的﹔若不成功,请参考 ddns 文件来完成。)

        成功后请再跑 nsupdate ,将 IP 改回 master 

 

** 注:上述步骤也可参考如下网页的部份内容:

        http://www.study-area.org/tips/ddns.htm

 

 

4.4﹐设定 MSQL  Replication

 

1)  master 上 执行 mysql ,增加 replication 账号:

        # mysql -u root -p 

               (输入您的 mysql 密码)

        mysql>GRANT FILE ON *.* TO rep_user2@4.3.2.1 IDENTIFIED BY ‘rep_password2’; 

        mysql>\q 

 

2)  master 上修改 /etc/my.cnf ,使之内容类似如下:

        [mysqld]

        datadir=/var/lib/mysql

        socket=/var/lib/mysql/mysql.sock

        ##comment out the following line to be slave

        server-id=1

        master-host=4.3.2.1

        master-user=rep_user1

        master-password=rep_password1

        master-port=3306

        log-slave-updates

        master-connect-retry=60

        replicate-do-db=phpBB

        ##comment out the following line to be master

        log-bin

        sql-bin-update-same

        binlog-do-db=phpBB

        

        [mysql.server]

        user=mysql

        basedir=/var/lib

        

        [safe_mysqld]

        err-log=/var/log/mysqld.log

        pid-file=/var/run/mysqld/mysqld.pid

 

 

3)  slave 上 执行 mysql ,增加 replication 账号:

        # mysql -u root -p 

               (输入您的 mysql 密码)

        mysql>GRANT FILE ON *.* TO rep_user1@1.2.3.4 IDENTIFIED BY ‘rep_password1’; 

        mysql>\q 

 

4)  slave 上修改 /etc/my.cnf ,使之内容类似如下:

        [mysqld]

        datadir=/var/lib/mysql

        socket=/var/lib/mysql/mysql.sock

        ##comment out the following line to be slave

        server-id=2

        master-host=1.2.3.4

        master-user=rep_user2

        master-password=rep_password2

        master-port=3306

        log-slave-updates

        master-connect-retry=60

        replicate-do-db=phpBB

        ##comment out the following line to be master

        log-bin

        sql-bin-update-same

        binlog-do-db=phpBB

        

        [mysql.server]

        user=mysql

        basedir=/var/lib

        

        [safe_mysqld]

        err-log=/var/log/mysqld.log

        pid-file=/var/run/mysqld/mysqld.pid

 

5)  请分别关闭 master  slave  mysqld 

        # /etc/rc.d/init.d/mysqld stop

 

 

6) 登入 master  mysqld 打包,并传至 slave 那边去 :

        # cd /var/lib

        # tar zcvf mysql.tgz mysql

        # scp mysql.tgz kenny@4.3.2.1:/home/kenny

        

7) 登入 slave ,并将 mysql 存放好:

        # cd /var/lib

        # mv mysql mysql.bak

        # tar zxvf /home/kenny/mysql.tgz

* 注:  建议只覆盖 /var/lib/mysql/ 目录底下的相关子目录,

        或将 mysql.bak/mysql 再盖回。

        否则 slave mysql 的设定还需从来,如:

        mysql>GRANT FILE ON *.* TO rep_user1@1.2.3.4 IDENTIFIED BY ‘rep_password1’; 

 

8) 最后,将 master  slave  mysqld 打开:

        # /etc/rc.d/init.d/mysqld start

 

9) 请以 mysql  phorum 来测试 replication 是否成功。

    若失败,不防将 mysql 目录下的如下档案砍掉:

         master.info

        *-bin.[0-9][0-9][0-9]

        *-bin.index

    再重跑 mysqld 

    另外,/var/log/mysqld.log 的信息也很有用,请勿略过。

 

   至于 phpBB 的设定,请修改 /home/phpbb/www/phpBB/config.php 即可。

 

** 注:上述步骤也可参考如下网页的部份内容:

        http://www.study-area.org/tips/mysql_replication.htm

 

 

4.5﹐撰写/下载 shell scripts 

 

当前面各项测试"全部"都成功之后,接下来就是写 shell script 的时侯了。

聪明的您应该不难写出符合自己需求的 script 

但若您不想那么麻烦的话,那也可以下载我写好的 script 会去修改:

 

1) 请以 root 身份下载:

        # cd

        # wget http://www.study-area.org/linux/src/swap_phorum.tgz

2) 解压缩:

        # tar zxvf swap_phorum.tgz

3) 您所下载的 tarball ,主要是要跑两个 script 

        ddns.sh

        swap_phorum.sh

    它们均共同使用 config 档来设定,您只需集中修改一个地方就够了。

        # cd swap_phorum

        # vi config

 

     config 里面,您可参考批注说明来修改设定参数,说明如下:

 

    KEY_FILE=$w_dir/Kphpbb.+157+01326.key     # ddns key

        用来更新 ddns  key ,也就是前述步骤 4.3 所用的 key 

 

    UPDATE_SCR=$w_dir/nsupdate.scr            # ddns template

        更新 ddns 用的范本,供 ddnsh.sh 使用,不能删除。

 

    UPDATE_DATA=$w_dir/nsupdate.data  # ddns data

        更新 ddns 用的数据,由 ddns.sh 产生,可删除。

        

    DDNS_SCRIPT=$w_dir/ddns.sh        # ddns script

        更新 ddns  script 

 

    STATE_FILE=/var/run/swap_phorum           # state file

         swap_phorum.sh 参考的状态档,由 script 自动产生/移除。

 

    PHPBB_DIR=/home/phpbb/www/phpBB   # phpbb directory      

        存放 phpBB 的目录。

        

    PHPBB_CONF=$PHPBB_DIR/config.php  # phpbb config file

        phpBB 的设定档,决定用哪一个 mysql 就靠它了。

        此档会被 swap_phorum.sh 修改,除非作测试,请勿修改。

        在第一次执行 swap_phorum.sh 之前,请确定它是可用的。

 

    CONF_BAK=$PHPBB_CONF.bak.swap_phorum      # phpbb config

        此档只有在第一次执行 swap_phorum.sh (或该档不存在时)产生,

        swap_phorum.sh 会参考此档来修改 config.conf 

        因此若需修改 phpBB 的设定,请修改这此档,并同步至 config.php 

 

    MAIL_LIST=phpbb@my.org            # notice recipient

        邮件通知信箱。请确定可收到邮件,以便及时了解 phorum 状态。

 

    HOST_NAME=phorum.my.org           # ddns host

        也就是别人连上  phorum  FQDN ddns 会修改这个 A record 

 

    NS_SERVER=1.2.3.4          # dns server ip

        DNS server  IP,请勿使用 FQDN 

 

    MASTER_HOST=1.2.3.5               # phorum master ip

        Master Phorum 主机的 IP ,请勿使用 FQDN

 

    SLAVE_HOST=4.3.2.1         # phorum slave ip

        Slave Phorum 主机的 IP ,请勿使用 FQDN

 

    NMAP=/usr/bin/nmap         # nmap path

        nmap 程序的绝对路径。

 

    WGET=/usr/bin/wget         # wget path

        wget 程序的绝对路径。

 

    INTERVAL=60                # seconds to waite

        每次侦测 master 是否存活的时间间隔。

 

    IF="eth0"                  # interface

         swap_phorum.sh  code 中,

        可以指定 ddns 更新 $HOST_NAME  master  slave  IP

        否则(若修改 code 的话),则以此界面的 IP 为准。

 

 

4) 当您完成 config 的修改之后,您可执行如下 script 来测试:


	
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有