mysql数据库主从配置

一、     背景介绍

首先由于单个mysql数据库的不健壮性,导致业务有可能中断,从而影响企业的业务进行;我希望增加mysql的健壮性,使用主从备份机制,如何解决此课题,请看下方详细分解:

 

二、     详细步骤

(一)  mysql主从配置硬件需求4台: 

A:(192.168.9.221)

B:(192.168.9.222)

C:(192.168.9.223)

D:(192.168.9.224)

(二) 配置后结果:
 
mysql数据库主从配置

 

1.     准备工作 

首先四台机器安装mysql,然后分别创建用于同步的账号: 

(三)  添加账户:

use mysql;

insert into user(

    Host, User, Password, Select_priv,

    Insert_priv, Update_priv, Delete_priv,

    Create_priv, Drop_priv

) values ( '%', 'backup', password('1'), 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');

(四)  刷新数据库: 

FLUSH PRIVILEGES;

2.     配置A-C互为主从

小知识点:

1.新安装的mysql没有my.cnf文件,我们需要拷贝/usr/share/mysql/my-large.cnf到/etc/下,修改名称为my.cnf;

2. mysql 配置文件的加载顺序和参数文件生效的优先级,自高---------->低

1>、mysql启动时直接指定的具体参数

2>、mysql 启动时直接指定位置的配置文件,优先级次

3>、mysql 数据目录下的my.cnf 文件

4>、mysql 读取 /etc/my.cnf

5>、mysql 默认的参数

(五)  修改A配置文件/etc/my.cnf为:

  replicate-do-db=advert

  log-bin=mysql-bin

  log-slave-updates

  replicate-wild-do-table=advert.%

  binlog-ignore-db=mysql

  slave-skip-errors=all

(六)  修改C配置文件为:

  binlog-do-db=advert

  log-bin=mysql-bin

  log-slave-updates

  replicate-wild-do-table=advert.%

  binlog-ignore-db=mysql

  slave-skip-errors=all

(七)  重启mysql是配置生效 

(八)  将A设置为主:

停止同步:

  stop slave;

清空服务器master日志:

  reset master;

授权同步账号:

  GRANT REPLICATION SLAVE ON *.* TO'backup'@'%' IDENTIFIED BY '1';

刷新授权: 

  flush privileges;

锁定数据库: 

  flush tables with read lock;

(九)  将C设置为从:

在A机器上执行Show master status;

 mysql数据库主从配置

停止C同步: 

 stop slave;

配置C同步信息:

 CHANGE MASTER TO MASTER_HOST='192.168.9.221',MASTER_USER='backup',

 MASTER_PASSWORD='1', MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=107;

(十)  将C设置为主: 

停止同步:

 stopslave;

清空服务器master日志: 

 reset master; 

授权同步账号:

 GRANT REPLICATION SLAVE ON *.* TO 'backup'@'%'IDENTIFIED BY '1';

刷新授权: 

 flush privileges; 

锁定数据库: 

 flush tables with read lock;

(十一)         将A设置为从:

在C机器上执行Show master status;(图片使用同一张,其实两者是不同的)

 mysql数据库主从配置

停止同步:

 stop slave; 

配置同步信息:

  CHANGE MASTER TO MASTER_HOST='192.168.9.223',MASTER_USER='backup',

  MASTER_PASSWORD='1', MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=107;

  启动A,C同步: 

start slave;

(十二)      将B设置为A的从

  replicate-do-db=advert

  log-bin=mysql-bin

  log-slave-updates

  replicate-wild-do-table=advert.%

  binlog-ignore-db=mysql

  slave-skip-errors=all

重启B的mysql服务 
停止同步:

  stop slave; 

配置同步信息: 

 CHANGE MASTER TOMASTER_HOST='192.168.9.221', MASTER_USER='backup',

 MASTER_PASSWORD='1',MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;

启动同步: 

 start slave; 

(十三)      将D设置为C的从 

  replicate-do-db=advert

  log-bin=mysql-bin

  log-slave-updates

  replicate-wild-do-table=advert.%

  binlog-ignore-db=mysql

  slave-skip-errors=all

重启mysql服务 
停止同步: 

  stop slave; 

配置同步信息:

  CHANGE MASTER TOMASTER_HOST='192.168.9.223', MASTER_USER='backup',

  MASTER_PASSWORD='1', MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=107;

启动同步: 

  start slave; 

完成之后可以创建添加数据测试一下是否可以。

三、     常见错误

1)  在没有解锁的情况下停止slave进程: 

mysql> stop slave; 

ERROR 1192 (HY000): Can't execute the given command because youhave active locked tables or an active transaction 

解决方法:

           解锁

            第一种

                      show processlist;

            找到锁进程,killid ;

           第二种

                      mysql>UNLOCK TABLES;

2)Error executing row event: 'Cannot execute statement: impossible towrite to binary log since statement is in row format and BINLOG_FORMAT =STATEMENT.'

解决方法:

是statement模式不足以应付应用,换成mixed试试

mysql>STOP SLAVE;

QueryOK, 0 rows affected (0.02 sec)

mysql> SET GLOBAL binlog_format=MIXED;

QueryOK, 0 rows affected (0.00 sec)

mysql>START SLAVE;

Query OK, 0 rows affected(0.00 sec)