linux下MySQL实现双机数据库复制的配置

来源:互联网 发布:京瓷复印机网络扫描 编辑:程序博客网 时间:2024/05/16 09:29

所谓备份就是对数据库的操作记录到日志中,然后通过日志进行恢复。是对数据库的操作,而不是操作后数据库中的值

在/etc/my.cnf配置文件中,有log-bin开关,打开就会将操作写日志文件,如mysql-bin.XXXX...。

原理:master端将对数据库的操作写入log-bin定义的日志文件中,slave端的I/0线程读取该文件,并写入本地relay-log中。SQL线程会读取本地的relay-log进行数据库的备份数据库,其实就是对数据库做相同的操作达到数据库的一致性。

注:可见MYSQL数据库的备份是异步的,5.5版本实现了同步备份

双机备份有单向备份和双向备份之分:

在备份之前要保证数据的一致性

一.单向

主数据库(master):192.168.2.133

备份数据库(slave):192.168.2.136

1.在备份之前把master的数据库zhy中的数据导入备份到slave:

mysqldump -u mysql -pmysql123 zhy>zhy.sql

scp zhy.sql mysql@192.168.2.136:/home/mysql/var/-----远程传输文件

在slave端输入shell命令:mysql -u mysql -pmysql123 zhy<zhy.sql

这样zhy数据库再主备中是一致的了。

2.master端:

进入mysql命令行:grant file,select,replication slave on *.* to backup@192.168.2.136 identified by '123';

给备份主机赋予复制权限,即备份主机使用用户名backup,密码123就可以连接到主服务器,backup就是同步账号

修改配置文件my.cnf[mysqld]:

sevice-id=1

log-bin=mysql-bin --------------打开日志开关,二进制日志文件

max_binlog_size=104857600

binlog_format=mixed--------日志模式row level和statement level的结合

binlog-do-db=zhy-------------在zhy库进行的操作记录二进制日志文件。而不是对zhy库的操作

binlog-ignore-db=mysql --------------------忽略对mysql库的操作,即不记录到日志中

查看master状态:

在mysql命令行:show master status

mysql> show master status;

+----------------------+-----------+------------------+------------------+

| File                       | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+----------------------+-----------+-------------------+------------------+

| mysql-bin.000014 |     1150 | zhy                  | mysql            |

+-----------------------+----------+------------------+------------------+

1 row in set (0.00 sec)

 

表示现在写日志的文件是mysql-bin.000014,位置是1105,slave端要从这个点开始同步备份

3.slave端:

停掉数据库:service mysql stop(不同系统可能不一样,我们公司是把mysql做成了一个服务)

修改配置文件my.cnf:

添加:

server-id=2

replicate-same-server-id

master-host=192.168.2.133

master-user=backup

master-password=123

master-port=3306

master-connect-retry=60 ----重复连接时间间隔

replicate-do-db=zhy---同步master的zhy库

relay-log=miniweb2-relay-bin----设置I/O线程读master的binlog并写入本地的文件名,即为relay-log

重启数据库:service mysql start

在mysql命令行:查看slave状态 show slave status/G;

 

mysql> show slave status/G;                                                                                                         *************************** 1. row ***************************

               Slave_IO_State:

                  Master_Host: 192.168.2.133

                  Master_User: backup

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: mysql_bin.000013

          Read_Master_Log_Pos: 1046

               Relay_Log_File: localhost-relay-bin.000001

                Relay_Log_Pos: 4

        Relay_Master_Log_File: mysql_bin.000013

             Slave_IO_Running: No

            Slave_SQL_Running: Yes

              Replicate_Do_DB: zhy

    …….

这时 Slave_IO_Running的值是No,I/O线程没有启动,是无法进行同步的

在命令行下:

(1)slave stop;

(2)change master to master_host='192.168.2.133',master_user='backup',master_password='123',master_log_file='mysql-bin.000014',master_log_pos=1150 ;(前面查看的master状态)

(3)slave start;

(4)show slave status;

 

mysql> show slave status/G;                                                                                                         *************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.2.133

                  Master_User: backup

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: mysql-bin.000013

          Read_Master_Log_Pos: 1046

               Relay_Log_File: localhost-relay-bin.000002

                Relay_Log_Pos: 251

        Relay_Master_Log_File: mysql-bin.000013

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

              Replicate_Do_DB: zhy 

这样就可以进行同步了,在master的zhy库中创建表,并插入数据会实时在slave端显示。

但是这个点(master_log_file='mysql-bin.000014',master_log_pos=1150)之前的数据是不会同步的,这点要注意的,所以要保证备份之前的数据一致。

 

二.双向备份:

双向备份就是上面的master同时做slave,slave同时做master。

在136上给原来的master创建一个同步账号(参考上面),并修改133和136的配置文件my.cnf

在任何一端对数据库的操作都会备份到另一端

注:这个配置看起来简单,但操作起来也出现了其他一些问题,这时就要自己学着解决,跟踪错误日志localhost.err,分析原因。

原创粉丝点击