数据库 MySQL 双机互为主从备份

crazyjin · 2015年01月27日 · 最后由 crazyjin 回复于 2015年01月27日 · 4271 次阅读

已有两只 mysql 服务,一个主,一个备。备上面还建了新的数据库. 现在想把这两只 msyql 服务配置成互为主从关系。当然,一切都要以现有数据安全为基础,mysql 服务可以容忍短时间暂停。

大家也许没有明白我的需求,再解释一下: 在现在主从同步的框架上,主 msyql 服务有数据库 A, 备数据库上不紧有 A 的备份,还有 B,C,D 等数据库. 我现在希望主 mysql 能够备份备 msyql 服务上的 B,C,D 等数据库。

求方案。

已解决,参考:http://xinnian.iteye.com/blog/930214

你说的不就是主主关系

#1 楼 @akin520 是的,两只 mysql 服务相互备份。

做过,如果两台服务器之间连接速度不快,那很可能出问题,另外,还要设定自增 key 等,如果出问题,要检查两边的同步日志。

建立别这样,你可以做读写分离的主从,别做主主,太折腾

#3 楼 @Peter 网速应该没有问题,同一个局域网内,都是 (10/100/1000Base-T Ethernet). 关键是现在备机上已经有新的数据库和数据了,都是很重要的交易数据。这是不是已经骑虎难下了?

#4 楼 @crazyjin 备机上有数据了,如果和主机上的 自增 key 有冲突,那就很棘手了。

如果在一个局域网,我觉得读写分离是最好的方案,一主一从或多从,相当稳定,出错也好解决。

如果有主键,那就是一台单,一台双,就是这样配置的

#5 楼 @Peter 自增 key 冲突,不太懂,伪运维一只。现在的业务还很少,数据库性能还不存在问题,主要考虑的是数据的安全。

#5 楼 @Peter 大家也许没有明白我的需求,再解释一下: 在现在主从同步的框架上,主 msyql 服务有数据库 A, 备数据库上不紧有 A 的备份,还有 B,C,D 等数据库. 我现在希望主 mysql 能够备份备 msyql 服务上的 B,C,D 等数据库。

#6 楼 @akin520 大家也许没有明白我的需求,再解释一下: 在现在主从同步的框架上,主 msyql 服务有数据库 A, 备数据库上不紧有 A 的备份,还有 B,C,D 等数据库. 我现在希望主 mysql 能够备份备 msyql 服务上的 B,C,D 等数据库。

#9 楼 @crazyjin 你这种情况很简单的,网上教程一大把,你这不叫真正意义上的主主备份。

真正的主主是同一库,同一表,你这种直接像配主从一样,很简单。

#10 楼 @Peter 嗯,那在现有主从备份的基础上,再增加主对备的其它数据库备份会有风险吗?

你指定库也是可以的,,,简单说就是两个主从就好了

#12 楼 @akin520 为什么配不起呢?我在做实验,先配一个主从,ok, 没问题。再反过来配置第二个主从的时候,就有问题了。

第一个主从管理配置:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
log-bin=mysql-bin
server-id=25
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
replicate-ignore-db=test
character_set_server= utf8
read_only=0
master-host=192.168.10.48
master-user=mysync
master-password=123456
master-port=3306
master-connect-retry=60

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

mysql> show slave status\G;

*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.10.48
                  Master_User: mysync
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000011
          Read_Master_Log_Pos: 106
               Relay_Log_File: mysqld-relay-bin.000027
                Relay_Log_Pos: 251
        Relay_Master_Log_File: mysql-bin.000011
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: test
           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: 106
              Relay_Log_Space: 552
              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
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
1 row in set (0.00 sec)

ERROR: 
No query specified

第二个主从关系中的从数据库的配置如下:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
log-bin=mysql-bin
server-id=24
expire-logs-days=10
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
replicate-ignore-db=test
replicate-ignore-db=syn
character_set_server= utf8
read_only=0
master-host=192.168.10.49
master-user=mysync1
master-password=123456
master-port=3306
master-connect-retry=60

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

mysql> show slave status\G;

*************************** 1. row ***************************
               Slave_IO_State: Connecting to master
                  Master_Host: 192.168.10.48
                  Master_User: mysync
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: 
          Read_Master_Log_Pos: 4
               Relay_Log_File: mysqld-relay-bin.000009
                Relay_Log_Pos: 4
        Relay_Master_Log_File: 
             Slave_IO_Running: No
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: test,syn
           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: 0
              Relay_Log_Space: 106
              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: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 1045
                Last_IO_Error: error connecting to master '[email protected]:3306' - retry-time: 60  retries: 86400
               Last_SQL_Errno: 0
               Last_SQL_Error: 
1 row in set (0.00 sec)

ERROR: 
No query specified

疑问 1, 用户名我明明配置的是 mysyn1, 为嘛在这里变成 mysqn 了 疑问 2, master_host 我配置的 192.168.10.49, 也变成 192.168.10.48, 也就是自己的 ip 了。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号