您的位置:首页 > 数据库 > MySQL

mysql数据库主从配置与主从切换(在文章底)

2016-06-21 10:36 495 查看
环境:

mysql版本:5.7.15

一:主从配置

1.配置主库

a.首先查看主服务器的版本是否是支持热备的版本。然后查看my.cnf(类unix)或者my.ini(windows)中Mysqld配置块的配置有没有log-bin(记录数据库更改日志),因为Mysql的复制机制是基于日志的复制机制,所以主服务器一定要支持更改日志才行。然后设置要写入日志的数据库或者不要写入日志的数据库。这样只有您感兴趣的数据库的更改才写入到数据库的日志中。

linux位置:vim /etc/my.cnf

win7位置:D:\server\mysql\my.ini #mysql安装目录下

server-id=1 //要求不同数据库要唯一

log-bin=log_name //日志文件的名称,也可以设置为:log_bin

binlog-do-db=db_name //记录日志的数据库
binlog-ignore-db=db_name //不记录日志的数据库

binlog_format=mixed //指定记录格式(STATEMENT,ROW,MIXED),推荐混合模式mixed

以上的如果有多个数据库用","分割开

service mysql restart(重启,让配置文件生效)

设置同步数据库的用户帐号

Mysql> GRANT REPLICATION SLAVE ON *.* TO 'user_slaver_235'@'192.168.1.235' IDENTIFIED BY 'uei123';

flush privileges;

2 备份主库数据

Mysql> FLUSH TABLES WITH READ LOCK; #加只读锁

Mysql> show master status;

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

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

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

| mysql-bin.000002 |      120 | ueitest      |                  |                   |

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

记录File 和 Position 项目的值,以后要用的。

root> mysqldump -h192.168.1.241 --hex-blob -uroot -p123456 --opt -q -R --add-locks --default-character-set=[gbk,UTF8] --master-data  ueitest>/data/ueitest20091118.sql #文件默认会生成在当前操作文件夹,如果sql导入时出现错误,考虑字符集(或者多个数据库用mysqldump
-uroot -ppassword  --databases uei uei2> dbnames.sql)

Mysql> unlock tables;  #解锁

3,设置从服务器

a.修改从库配置文件

vim /etc/my.cnf

server-id=11 #要求不同数据库要唯一

root> service mysql restart
f393
#让配置文件生效

#以下配置推荐

master-connect-retry=60 //如果从服务器发现主服务器断掉,重新连接的时间差(从库可不配)

report-host=db-slave.mycompany.com //报告错误的服务器

#以下配置选配(5.5等高版本已不支持该方法,建议废弃) 用CHANGE MASTER TO 来配置C步骤

master-host=192.168.1.220 //主服务器的IP地址或者域名

master-port=3306 //主数据库的端口号

master-user=pertinax //同步数据库的用户
master-password=freitag //同步数据库的密码

b.导入数据

1,把从主数据库服务器备份出来的数据库导入到从服务器中
从库上运行: scp root@192.168.1.241:/data/ueitest20091118.sql  /data/

2,Mysql> slave stop; 或者 stop slave;//停止slave的服务
3,mysql -h192.168.1.235 -uroot -p --default-character-set=[gbk,UTF8] ueitest</data/ueitest20091118.sql #如提示没有该数据库,请新建

(多个数据库还原用登录mysql后直接执行 	mysql> source /data/uei10161018.sql,不用create database语句)


导入过程出现异常,应先处理好异常,在继续操作:
   1,ERROR 2006 (HY000) at line 4426: MySQL server has gone away
   修改参数:
   mysql> set global max_allowed_packet=1024*1024*16;
   mysql> show global variables like 'max_allowed_packet';
   2,其他数据异常,考虑字符集原因。

c.设置主服务器的各种参数

Mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.241', MASTER_USER='user_slaver_235', MASTER_PASSWORD='uei123', MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=120;

d.启动同步数据库的线程

Mysql> slave start;  或者 start slave;

5,主库,从库查看状态和测试:

1、查看master的状态

show master status;  //Position不应该为0

show processlist;

//state状态应该为Has sent all binlog to slave; waiting for binlog to be updated

2、查看slave状态

show slave status \G

//Slave_IO_Running 与 Slave_SQL_Running 状态都要为Yes

show processlist;

//应该有两行state值为:

Has read all relay log; waiting for the slave I/O thread to update it

Waiting for master to send event

以上操作完成主从配置XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

其他配置:启动从库的时候不想启动slave,在配置文件中mysqld下添加:skip-slave-start

#修复MYISAM表

myisamchk -r -q jir_businesssurveys.MYI

CHANGE MASTER TO MASTER_HOST='211.192.168.229', MASTER_USER='userup', MASTER_PASSWORD='data100back', MASTER_LOG_FILE='mysqlbinlog.000315','MASTER_LOG_POS=633755384;

ALTER TABLE jir_surveyresponses CHANGE xml xml longtext CHARACTER SET GBK;//modify table colum charset

grant select on survey to survey@'%' IDENTIFIED BY 'survey' WITH GRANT OPTION;

grant select on survey to survey@%,IDENTIFIED BY "survey";

set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

GRANT ALL ON *.* TO 'survey'@'%' IDENTIFIED BY 'survey' WITH GRANT OPTION;

GRANT REPLICATION SLAVE ON *.* TO 'userup'@'211.192.168.229' IDENTIFIED BY 'data100backup';

mysqlfront create table 能同步 增加字段能同步

mysqladministrator  增加,不能同步

mysql> show master status;

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

| File               | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| mysqlbinlog.000026 |     9143 | survey       |                  |

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

1 row in set (0.00 sec)

CHANGE MASTER TO MASTER_HOST='211.192.168.232', MASTER_USER='userup', MASTER_PASSWORD='data100back', MASTER_LOG_FILE='mysqlbinlog.000026','MASTER_LOG_POS=9143;

mysqlbinlog mysqlbinlog.000027

 

二,主从切换

A主,B、C从。A故障,B替换为主。

1,A故障后,确保B、C已执行relay log中的全部更新。

B执行:   stop slave IO_THREAD; #停止slave线程继续读取新日志;

              show processlist \G #看到State:Has read all ……. 说明日志已经更新完成。

2,B上执行:

    stop slave;

    reset master; #此时报Binlog没有设置,执行失败。关闭B库,修改/etc/my.cnf ,在配置文件中添加log-bin选项([mysql]后面):log-bin=/usr/local/var/mysql/mysql-bin 。配置后重启,登录,继续执行:stop salve; reset master; #此时B库已为主库。

3,B库上添加replication权限用户repl,查询主库状态:

     grant replication slave on uei.* to 
'repl'@'localhost' identified by '123';

    show master status;

4,C从库上配置参数

    change master to

    --> master_host='127.0.0.1',

    -->master_user='repl',

    -->master_password='123',

    -->master_port=3307,

    -->master_log_file='mysql-bin.000002',

    -->master_log_pos=98;

    start slave;

5,C从库执行:

    show slave status \G       #查看状态

6,sql语句校验,B库执行修改语句,C库查看数据变更。

(主从切换完成)

   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: