MySQL主从库配置以及常见问题

此文档包含两部分:

一、MySQL主从库的配置     二、常见问题以及解决方法


一、MySQL主从库的配置


说明:

         1、此文档记录的是MySQL主从库最常用的配置方法,即:一主一从(或一主多从)。

                   切记:此种配置一定是主写从读。

         2、MySQL主从库的原理,这里就不介绍了,可以自行百度,这个网址也有详细说明:

                   http://blog.csdn.net/hguisu/article/details/7325124/

         3、本次配置环境:

                   (1)VMware虚拟机;

                   (2)虚拟两台主机:

                            主机(master):系统:ubuntu-16.04-desktop-amd64.iso; IP:192.168.142.166

                            主机(slave):  系统:ubuntu-16.04-desktop-amd64.iso; IP:192.168.142.167

                   (3)MySQL版本:mysql-server_5.6.26-1ubuntu14.04_amd64.deb-bundle.tar

         4、若仅想看主从库的配置,可直接查看第五步、第六步。


第一步:安装MySQL(已安装则忽略)


         分别在两台主机安装MySQL:

         1、cd

       2、mkdir mysql-deb

       3、cd mysql-deb

       4、下载mysql-server_5.6.26-1ubuntu14.04_amd64.deb-bundle.tar到当前目录

       5、tar -xf mysql-server_5.6.26-1ubuntu14.04_amd64.deb-bundle.tar

       6、安装支持包:sudo apt-get install libaio1

       7、sudo dpkg -i mysql-common_5.6.26-1ubuntu14.04_amd64.deb

       8、sudo dpkg -i mysql-community-server_5.6.26-1ubuntu14.04_amd64.deb

       9、sudo dpkg -i mysql-community-client_5.6.26-1ubuntu14.04_amd64.deb


       启动、停止MySQL命令:

       /etc/init.d/mysqlstart

       /etc/init.d/mysqlstop


       在主库(192.168.142.166)配置文件中注释bind-address = 127.0.0.1 (否则从         库不能远程登录主库)

       cd/etc/mysql

       vi my.cnf

       # bind-address= 127.0.0.1

第二步:在主库建立数据库(已有库则忽略)

         1、mysql  -uroot  -p

         2、create database osyunweidb CHARACTER SET'utf8mb4' COLLATE                           'utf8mb4_general_ci';

       3、use osyunweidb;

       4、CREATE TABLE `userinfo` (

              `id` int(20) NOT NULL AUTO_INCREMENT,

              `name` char(20) DEFAULT NULL,

              `age` int(11) DEFAULT NULL,

               `sex` char(2) DEFAULT NULL,

               PRIMARY KEY (`id`)

              );

         5、INSERT INTO `userinfo`(name,age,sex) VALUES ( 'adai',18,'1');


第三步:建立同步用户——从库连接登陆主库的用户(已有用户则忽略)

         1、mysql  -uroot  -p

         2、创建用户:

         GRANTUSAGE ON *.* TO 'osyunweidbbak '@'192.168.142.167' IDENTIFIED BY '123456'          WITH GRANT OPTION;

create user 'osyunweidbbak'@'192.168.142.167' identified by 'qwe123';  —— 8.0;

         用户:osyunweidbbak

         密码:123456

         只能从主机192.168.142.167(从库IP)远程登录

         3、查看用户权限:

         showgrants for osyunweidbbak @'192.168.142.167';

         显示:


只有 USAGE权限:只允许登录--其它什么也不允许做。

       4、更改用户osyunweidbbak的权限:

         grantreplication slave on *.* to 'osyunweidbbak '@'192.168.142.167' identified by'123456'   with grant option;

grant replication slave on *.* to 'osyunweidbbak'@'192.168.142.167';——8.0

         显示:


授权用户osyunweidbbak只能从192.168.142.167这个IP访问主库(192.168.142.166)     的数据库,并且只具有数据库备份的权限。

         5、刷新系统授权表

                   flushprivileges;     

flush privileges;——8.0

       6、测试在从库服务器上登录到主库

         mysql-u osyunweidbbak -h 192.168.142.166 -p




第四步:把主库的数据库导入到从库中

         1、在主库导出数据库(192.168.142.166)

         进入mysql 客户端程序和脚本目录

         cd/usr/bin

       flushtables with read lock;

       mysqldump-u root -p osyunweidb > /home/osyunweidbbak.sql

       unlocktables;

         2、导入数据到从库(192.168.142.167)

         mysql  -u root -p

       source  /home/osyunweidbbak.sql


第五步:配置主库(192.168.142.166)的my.cnf文件

         1、cd /etc/mysql

         2、vi my.cnf

         配置如图:


注意:红色框部分。

说明:

         (1)server-id=1

         #设置服务器id,1表示主服务器(主库),注意:如果原来的配置文件中已经有这一行,      就不用再添加了。


(2)log_bin=mysql-bin

         #启动MySQ二进制日志系统,注意:如果原来的配置文件中已经有这一行,就不用再   添加了。


(3)binlog-do-db=osyunweidb

         #需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行。


(4)binlog-ignore-db=mysql

         #不需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行。

         3、重启MySQL

         /etc/init.d/mysql restart

         4、查看主库信息

         mysql -u root -p

         show master status;

         显示:


说明:与my.cnf配置的参数一致,同步数据库:osyunweidb,不同步数据库: mysql;         特别注意:这里需要记下File和Position的值,这是从库同步主库数据开始的同步点。

第六步:配置从库(192.168.142.167)的my.cnf文件

         1、cd /etc/mysql

         2、vi my.cnf

         配置如图:


注意:红色框部分。

         说明:

         (1)server-id=2

         #设置服务器id,2表示从服务器(从库),注意:如果原来的配置文件中已经有这一行,      就不用再添加了。


(2)replicate_wild_do_table = osyunweidb.%

         #需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行。


(3)replicate_wild_ignore_table=mysql .%

         #不需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行。

         (4)特别注意,注释掉的两行:

         replicate-do-db=osyunweidb

         replicate-ignore-db=mysql

         从库的配置文件不可用这两个参数,在同步数据的时候会有隐患,参考“二、常见问     题以及解决方法”的说明。

         (5)从库不需要开启二进制日志,除非有必要:如,此从库又作为别的从库的主库,  或者此从库需要增量备份。

         (6)MySQL 5.1.7版本之后,已经不支持把主库(master)配置属性,如:

       master_host='192.168.142.166', master_user='osyunweidbbak',

         master_password='123456', master_log_file='mysql-bin.000006' ,

         master_log_pos=44884752

         写入my.cnf配置文件中了,只把要同步的数据库和要忽略的数据库写入my.cnf即可。

         3、重启MySQL

         /etc/init.d/mysqlrestart

         4、mysql -uroot -p

         5、停止slave同步进程

         stop slave;

         6、执行同步语句(设置主库IP、登录用户名密码、同步文件、同步点)

         change master to  master_host='192.168.142.166',master_user='osyunweidbbak',master_password='123456',         master_log_file=' mysql-bin.000006' ,master_log_pos=44884752;

         注意:这里的master_log_file=' mysql-bin.000006' ,master_log_pos=44884752 就是前面在          主库查看并记录下来的File和Position的值。

         7、start slave;

         8、查看slave同步信息

         show slave status\G  (用\G结尾而不是分号结尾,按行显示结果)

         显示:


注意查看:

       Slave_IO_Running: Yes

       Slave_SQL_Running: Yes

      

以上这两个参数的值为Yes,即说明配置成功,而正在运行。

       注意核对其他信息是否正确。

出现错误:ERROR 2061 (HY000): Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.

解决:加参数:

mysql -u root -p --get-server-public-key

change master to  master_host='192.168.142.166',master_user='osyunweidbbak',master_password='123456',         master_log_file=' mysql-bin.000006' ,master_log_pos=44884752, get_master_public_key=1;

第七步:测试同步是否成功以及一般稳定性

         手工测试只能简单的插入、删除或更新几条数据,所以可以写几行代码随机、长时间、         大批量的对主库插入、删除或更新数据;然后查看主库和从库的数据一致性(简单的只     能看总记录数是否一致了)。

         结果如下(从前一天晚上6点运行到次日8点):


可以看到,不管是插入数据还是删除数据操作,主库、从库 userinfo表的记录数都保     持一致。数据量已经有28万了。

OK,主从库配置完毕。


二、常见问题以及解决方法


1、从库没有同步主库的数据

分两种情况:

1)从库在执行SQL语句时发生错误

默认下从库在同步数据执行SQL语句时,只要发生错误,就会停止同步,不会跳过;

(当然主库本就没有执行成功的SQL语句,不会影响从库同步)。

查看方法:

①主服务器(主库)查看进程是否Sleep太多:

show processlist;

 ②查看主库状态是否正常:

show master status;

③查看从库状态信息:

show slave status\G

显示:

Slave_IO_Running: Yes

Slave_SQL_Running: No

Last_SQL_Error: Error 'PROCEDURE BK.zoucmdoes not exist' on query. Default database: 'BK'. Query: 'drop procedure zoucm'

可见slave没有同步,SQL报错。


解决方法:

如果数据可控的情况下,可以忽略错误,继续同步:

1、停止slave服务器的主从同步:

stop slave;

2、跳过一步错误,数字表示跳过多少步:

set global sql_slave_skip_counter =1;

3、开启slave服务:

start slave;


如果数据已经不可控,可以考虑重做主从库:

1.先进入主库(192.168.142.166),锁表,防止数据写入

flush tables withread lock;

2、备份主库数据:

mysqldump -uroot-p  > mysqlmaster.bak.sql

3、重置主库maste

RESET MASTER;

4、查看master状态,并记录file和postion

show master status;

5、对主库(192.168.142.166)解锁表

UNLOCK TABLES;

6、进入从库(192.168.142.167),停止从库的同步状态

stop slave;

或者直接停止从库mysql服务

/etc/init.d/mysql stop

7、找到从库的中继日志,把中继日志相关的文件都删除

find / -name mysqld-relay-bin.*

rm -rf ...

7、(在从库操作)导入备份数据库

source mysqlmaster.bak.sql

8、清除同步信息

reset slave all;

9、(在从库操作)配置从库同步,注意同步点,即第4步查看的file和position信息

change master to master_host='192.168.142.166',master_user='osyunweidbbak',master_password='123456',master_log_file='mysql-bin.000006' ,master_log_pos=44884752;

注意:这里的master_log_file=' mysql-bin.000006' ,master_log_pos=44884752

要按实际的填写。


10、重新开启从库同步

START SLAVE;

11、(在从库操作)查看同步状态

show slave status\G

显示:

Slave_IO_Running:Yes

Slave_SQL_Running:Yes


2)从库配置文件中使用参数replicate-do-db replicate-ignore-db

在配置从库的my.cnf文件时,如果使用参replicate-do-db 和replicate-ignore-db 会导致从库同步主库数据时忽略掉主库的跨库更新SQL语句。例如,主库:

usedb1;

insert intodb2.userinfo(name,age,sex) values ( 'adai',18,'1');

那么从库同步时会忽略此语句,即不会同步此数据。

所以为了避免此问题,应该使用参数:

replicate_wild_do_table = osyunweidb.%

replicate_wild_ignore_table=mysql .%

配置需要同步和不需要同步的数据库。


2、从库同步状态显示:Slave_IO_Running connecting

这是从库无法登陆主库。

主要有三个原因:

(1)网络不通

(2)登陆主库的账号密码不对或者权限问题

(3)position的位置不对

(4)主库的配置文件my.cnf 没有注释bind-address = 127.0.0.1

一一检查即可。

完毕。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351

推荐阅读更多精彩内容