我的数据库版本:mysql-5.0.37.
注释:你不能从使用新二进制日志格式的主服务器向使用旧二进制日志格式的从服务器复制(例如,从MySQL 5.0到MySQL 4.1)。

master: 192.168.1.115:3308
slave: 192.168.1.115:3309

一、master操作
      1、修改my.ini
      ##############
      server-id=11
      log-bin=mysql-bin
      binlog-do-db=bak_test
      binlog-ignore-db=mysql
      ##############

      说明
      binlog-do-db=bak_test 允许同步的数据库
      binlog-ignore-db=mysql 不允许同步的数据库

      2、然后重启mysql

      3、在master上增加一个同步的用户名

      mysql> GRANT REPLICATION SLAVE ON *.* TO ‘backup’@’%’ IDENTIFIED BY ‘123456’;
      注:
      如果mysql版本在4.0.2以前的版本请用
      mysql> GRANT FILE ON *.* TO ‘backup’@’%’ IDENTIFIED BY ‘123456’;

      4、接下来操作要master上要同步的数据库
      mysql> USE bak_test;
      mysql> FLUSH TABLES WITH READ LOCK; #锁定要同步的bak_test表,然后导出数据结构

      执行如下命令查看master的状态
      mysql> SHOW MASTER STATUS;

      得到如下结果
      Code:
      +———————-+———-+————–+——————+
      | File | Position | Binlog_do_db | Binlog_ignore_db |
      +———————-+———-+————–+——————+
      | mysql-bin.000005 | 79 | bak_test | mysql |
      +———————-+———-+————–+——————+
      1 row in set (0.00 sec)

      接下来备份要同步数据库(为导入slave作准备)
      $ mysqldump –opt bak_test > bak_test.sql

      mysql> UNLOCK TABLES; #已做好同步数据库结构导出后,解锁这个表

二、slave操作
      1、把master里导出的同步数据库结构再导入slave的mysql里
      mysql bak_test < bak_test.sql

      2、修改slave的my.ini
      ####################
      log-bin=mysql-bin
      server-id=12
      master-host=192.168.1.115
      master-user=backup
      master-password=123456
      master-port = 3308
      master-connect-retry=60
      replicate-do-db=bak_test
      ####################

      说明:
      master-host=192.168.1.115 #master的IP
      master-user=backup #master上作为同步用的用户名
      master-password=123456 #同步用户名的密码
      master-connect-retry=60 #设置同步的时间
      replicate-do-db=bak_test #需要同步的数据库

      3、重新启用mysql
      c:\mysql\bin\mysql restart 或 /etc/init.d/mysql restart

      4、进入slave的mysql,对mysql进行操作
      mysql> stop slave; #停止slave服务器

      mysql> CHANGE MASTER TO
      -> MASTER_HOST=’192.168.1.115′,
      -> MASTER_PORT=3308,
      -> MASTER_USER=’backup’,
      -> MASTER_PASSWORD=’123456′,
      -> MASTER_LOG_FILE=’mysql-bin.000005′,
      -> MASTER_LOG_POS=79;

      mysql> START SLAVE; #开启slave服务器就可以同步了

     

      注:
      MASTER_LOG_FILE=’mysql-bin.000005′,
      MASTER_LOG_POS=79;
      上面这两条是一开始从master上进入mysql,运行 SHOW MASTER STATUS; 查看到的,在实际操作中也可以不加的。

     

     

##############################################
在主服务器上,SHOW PROCESSLIST的输出看上去应为:

mysql> SHOW PROCESSLIST\G
*************************** 1. row ***************************
       Id: 2
     User: root
     Host: localhost:32931
       db: NULL
Command: Binlog Dump
     Time: 94
    State: Has sent all binlog to slave; waiting for binlog to
           be updated
     Info: NULL
这儿,线程2是一个连接从服务器的复制线程。该信息表示所有主要更新已经被发送到从服务器,主服务器正等待更多的更新出现。

在从服务器上,SHOW PROCESSLIST的输出看上去应为:

mysql> SHOW PROCESSLIST\G
*************************** 1. row ***************************
       Id: 10
     User: system user
     Host:
       db: NULL
Command: Connect
     Time: 11
    State: Waiting for master to send event
     Info: NULL
*************************** 2. row ***************************
       Id: 11
     User: system user
     Host:
       db: NULL
Command: Connect
     Time: 11
    State: Has read all relay log; waiting for the slave I/O
           thread to update it
     Info: NULL
该信息表示线程10是同主服务器通信的I/O线程,线程11是处理保存在中继日志中的更新的SQL线程。SHOW PROCESSLIST运行时,两个线程均空闲,等待其它更新。

**********************

MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。(这与同步复制可以进行对比,同步复制是MySQL簇的一个特征)。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。

如果你想要设置链式复制服务器,从服务器本身也可以充当主服务器。

请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要小心,以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。

单向复制有利于健壮性、速度和系统管理:

・          主服务器/从服务器设置增加了健壮性。主服务器出现问题时,你可以切换到从服务器作为备份。

・          通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。SELECT查询可以发送到从服务器以降低主服务器的查询处理负荷。但修改数据的语句仍然应发送到主服务器,以便主服务器和从服务器保持同步。如果非更新查询为主,该负载均衡策略很有效,但一般是更新查询。

・          使用复制的另一个好处是可以使用一个从服务器执行备份,而不会干扰主服务器。在备份过程中主服务器可以继续处理更新。参见5.9.1节,“数据库备份”。

发表评论

邮箱地址不会被公开。 必填项已用*标注