首页 > mysql, wamp服务器 > Mysql数据库主从同步复制实践

Mysql数据库主从同步复制实践

2009年9月17日 admin 发表评论 阅读评论

Mysql数据库主从同步复制备份,用了一个下午和一个上午时间终于OK了。唯一的问题就是从slave安装时编码设置为latin1,同步的中文数据在cmd下显示乱码。真正用于生产环境中编码最好一致!

测试环境:
主:XP mysql5.0.27 3308 gbk编码  无线网络连接192.168.1.9
从:XP mysql5.0.27 3306 latin1编码 本地连接  192.168.1.36(配置时不需要用到这个IP)
注:2台mysql服务器能ping通,而且在从服务器上能登陆主mysql服务器;如果能ping通而连不上,把主服务器的操作系统防火墙端口3308设为充许。

目标:同步主下的gb数据库
主:已存在gb数据库
从:手工新建同名数据库gb,数据可以从主mysql服务器上导出再导入进来,这样可以保证数据库的完整性。
一、配置主mysql服务器
1、为从服务器分配一个连接账户,REPLICATION CLIENT和REPLICATION SLAVE权限就可以了,我为了方便用了root账号:)
2、配置my.ini
->文本最后添加如下:
#duliang_add start

server-id=1 
#设置需要记录log 可以设置log-bin=homemysqlmysqllog 设置日志文件的目录,  
#其中mysqllog是日志文件的名称,mysql将建立不同扩展名,文件名为mysqllog的几个日志文件。
log-bin = D:Program FilesMySQLMySQL Server 5.0duliang_addloogmysqllog  
 
#指定需要日志的数据库   
binlog-do-db=gb
#duliang_add end

->cmd下:重启主mysql
net stop mysql
net start mysql

3、进入mysql,输入命令show master status 命令看日志情况。
mysql> show master status;
+—————–+———-+————–+——————+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+—————–+———-+————–+——————+
| mysqllog.000006 |     1254 | gb           |                  |
+—————–+———-+————–+——————+
1 row in set (0.00 sec)

二进制日志值为mysqllog.000006偏移量为1254,同步的数据为gb。记录该值以后设置从服务器时需要使用这些值。它们表示复制坐标,告诉从服务器应从该点开始从主服务器上进行更新。
二、配置从mysql服务器
1、配置my.ini
->文本最后添加如下:
#duliang add start
server-id=2  
master-host=192.168.1.9 #主 的IP地址  
master-user=root #同步用户帐号  
master-password=duliang #主 数据库的密码  
master-port=3308  
master-connect-retry=60 #预设重试间隔60秒  
replicate-do-db=gb #设置slave只做gb数据库的更新
#duliang add end

->重启
下面2句是参考网友 丁丁笔迹 的:
注意:由于设置了slave的配置信息,mysql在数据库目录下生成master.info
所以如有要修改相关slave的配置要先删除该文件。否则修改的配置不能生效。

2、用show slave status\G;
检查Slave_IO_Running和Slave_SQL_Running是否都是Yes;
查看
Slave_IO_State字段:
1.空 //复制没有启动
2.Connecting to master//没有连接上master
3.Waiting for master to send event//已经连上

mysql> show slave status\G;
*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                Master_Host: 192.168.1.9
                Master_User: duliang
                Master_Port: 3308
              Connect_Retry: 60
            Master_Log_File: mysqllog.000006
        Read_Master_Log_Pos: 1254
             Relay_Log_File: 共享服务器-relay-bin.000004
              Relay_Log_Pos: 737
      Relay_Master_Log_File: mysqllog.000006
           Slave_IO_Running: Yes
          Slave_SQL_Running: Yes
            Replicate_Do_DB: gb
        Replicate_Ignore_DB:
         Replicate_Do_Table:
     Replicate_Ignore_Table:
    Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
                 Last_Errno: 0
                 Last_Error:
               Skip_Counter: 0
        Exec_Master_Log_Pos: 1254
            Relay_Log_Space: 737
            Until_Condition: None
             Until_Log_File:
              Until_Log_Pos: 0
         Master_SSL_Allowed: No
         Master_SSL_CA_File:
         Master_SSL_CA_Path:
            Master_SSL_Cert:
          Master_SSL_Cipher:
             Master_SSL_Key:
      Seconds_Behind_Master: 0
1 row in set (0.00 sec)

ERROR:
No query specified

3、如果出现了:
Slave_IO_Running: No
或者
Slave_SQL_Running: No
的情况,可通过如下解决:
(1)、确定分配置给从的账号可以远程登陆主mysql服务器,这是关键。
(2)、可能是二进制File和Position产生的问题

<1> 首先停掉Slave服务:slave stop;
<2> 查看主服务器状态 mysql> show master status;
+—————–+———-+————–+——————+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+—————–+———-+————–+——————+
| mysqllog.000006 |     1254 | gb           |                  |
+—————–+———-+————–+——————+
1 row in set (0.00 sec)

<3> 在从slave上做手工同步
change master to
> master_host=’192.168.1.9′,
> master_user=’root’,
> master_password=’duliang’,
> master_port=3308,
> master_log_file=’mysqllog.000006′,
> master_log_pos=1254;

<4> mysql> slave start;

<5>再查看从slave的状态
mysql> show slave status\G;
*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                Master_Host: 192.168.1.9
                Master_User: duliang
                Master_Port: 3308
              Connect_Retry: 60
            Master_Log_File: mysqllog.000006
        Read_Master_Log_Pos: 1254
             Relay_Log_File: 共享服务器-relay-bin.000005
              Relay_Log_Pos: 234
      Relay_Master_Log_File: mysqllog.000006
           Slave_IO_Running: Yes
          Slave_SQL_Running: Yes
            Replicate_Do_DB: gb
        Replicate_Ignore_DB:
         Replicate_Do_Table:
     Replicate_Ignore_Table:
    Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
                 Last_Errno: 0
                 Last_Error:
               Skip_Counter: 0
        Exec_Master_Log_Pos: 1254
            Relay_Log_Space: 234
            Until_Condition: None
             Until_Log_File:
              Until_Log_Pos: 0
         Master_SSL_Allowed: No
         Master_SSL_CA_File:
         Master_SSL_CA_Path:
            Master_SSL_Cert:
          Master_SSL_Cipher:
             Master_SSL_Key:
      Seconds_Behind_Master: 0
1 row in set (0.00 sec)

ERROR:
No query specified
正常了,也可以用show processlistG;查看。

Demo图:

主master服务器

主master服务器

slave从服务器

slave从服务器

分类: mysql, wamp服务器 标签: