mysql主从配置

环境配置

调试信息如下,linux6.8, mysql5.6.42版本,两台虚拟机,分别为192.168..100 和192.168..101, 以下简称100和101, 101为主节点,100为从节点,采用一主一从的配置方式。 my.cnf的文件位置在/etc/my.cnf中。具体的my.cnf的加载顺序:
不同的操作系统加载顺序可能不同,具体查看自己的机器加载顺序可以使用如下命令:
./bin/mysql --help|grep my.cnf

图片.png

eg:
OS:CentOS 7
MySQL:MySQL 5.7
MySQL安装目录:/usr/local/mysql
加载顺序为:

  • /etc/mysql/my.cnf->
  • /etc/my.cnf->
  • ~/.my.cnf

eg:
OS:CentOS 6
MySQL:MySQL 5.6
MySQL安装目录:/application/mysql-5.6.44
加载顺序为:

  • /etc/my.cnf->
  • /etc/mysql/my.cnf->
  • /application/mysql-5.6.44/etc/my.cnf->
  • ~/.my.cnf

总结
“如果几个配置文件中都有同一个参数,MySQL数据库以哪个配置文件为准?”
答案很简单,MySQL数据库会以读取到的最后一个配置文件中的参数为准。


数据文件目录为/usr/local/mysql/data目录下。
mysql基本安装步骤略去,后面有时间会补充基本安装步骤。

配置主节点

  1. [mysqld]配置项中 配置server-id=1, 注意是server ,不是service,手误,踩过坑
  2. 启用binlog日志,在[mysqld] 配置项中设置 log-bin = mysql-bin, 也可以指定具体文件路径
    如:log-bin=/usr/local/mysql/data/mysqlbinlog/mysql-bin
    log-bin配置项表示binlog的base name,产生的日志文件名称类似,mysql-bin.00001,mysql-bin.00002,mysql-bin.00003。

以上两步为必选项,下面为可选项

  1. log-bin=/usr/local/mysql/data/mysqlbinlog/mysql-bin 设置错误日志文件目录
  2. binlog-do-db = db 要复制的数据库名,如果复制多个数据库,重复设置这个选项即可

完成以上配置项后,其中1.2必选,3,4可选,重启mysql服务
在mysql命令行中执行如下命令:

grant  replication slave on *.* to 'root'@192.168.92.100 identified by '123456'

具体含义如图:


图片.png

2.执行该命令: flush privileges;

  1. 执行show master status命令


    图片.png

简单说: 从mysqlbin.000035这个文件的341行开始复制,binlog_do_db 是哪些数据库需要同步,Binlog_Ingore_db表示忽略哪些数据库

以下是几个比较常用的命令:

  • 查看日志开启状态 show variables like 'log_%';
  • 查看所有binlog日志列表 show master logs;
  • 查看最新一个binlog日志的编号名称,及其最后一个操作事件结束点 show master status;
    至此 master基本配置完成。
  • 刷新log日志,立刻产生一个新编号的binlog日志文件,跟重启一个效果 flush logs;
  • 清空所有binlog日志 reset master;
  • 日志查看,因为是二进制文件没法用vi等打开,可以用mysql的mysqlbinlog打开,/usr/bin/mysqlbinlog /home/logs/mysql-bin.000001,当然每个人路径可能不一样,这个只能自己去找了


    图片.png

从节点配置

  1. 修改my.cnf的【mysqld】配置项,增加server-id=2 属性
  2. 也可以开启binlog日志 日志选项
  3. 本地测试,避免出现连接问题,关闭防火墙测试
    在100机器mysql命令行执行:
CHANGE MASTER TO MASTER_HOST='192.168.92.101', MASTER_USER='root', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=120;
  1. 执行 start slave ,报错了


    图片.png

查了点资料,解决方法:
找到原因所在了,由于我使用的是冷备份文件恢复的实例,在mysql库中的slave_relay_log_info表中依然保留之前relay_log的信息,所以导致启动slave报错。
mysql提供了工具用来删除记录:reset slave ;
slave reset执行候做了这样几件事:
1、删除slave_master_info ,slave_relay_log_info两个表中数据;
2、删除所有relay log文件,并重新创建新的relay log文件;


  1. 重新执行start slave 成功


    图片.png
  2. 查看状态:show slave status \G;


    图片.png

其中首先关注的是两个线程的状态
Slave_IO_Running: Yes
Slave_SQL_Running: No
Yes表示正常,No表示异常
Slave_IO线程负责把主库的bin日志(Master_Log)内容,抄写到从库的中继日志上(Relay_Log)。
Slave_SQL线程负责把中继日志上的语句在从库上执行一遍。
以上各个属性的解释:

Slave_IO_State

SHOW PROCESSLIST输出的State字段的拷贝。SHOW PROCESSLIST用于从属I/O线程。如果线程正在试图连接到主服务器,正在等待来自主服务器的时间或正在连接到主服务器等,本语句会通知您

 Master_User

被用于连接主服务器的当前用户。

Master_Port

当前的主服务器接口。

Connect_Retry

--master-connect-retry选项的当前值

Master_Log_File

I/O线程当前正在读取的主服务器二进制日志文件的名称。

Read_Master_Log_Pos

在当前的主服务器二进制日志中,I/O线程已经读取的位置。

Relay_Log_File

SQL线程当前正在读取和执行的中继日志文件的名称。

Relay_Log_Pos

在当前的中继日志中,SQL线程已读取和执行的位置。

Relay_Master_Log_File

由SQL线程执行的包含多数近期事件的主服务器二进制日志文件的名称。

Slave_IO_Running

I/O线程是否被启动并成功地连接到主服务器上。

Slave_SQL_Running

SQL线程是否被启动。

Replicate_Do_DB,Replicate_Ignore_DB

使用--replicate-do-db和--replicate-ignore-db选项指定的数据库清单。

Replicate_Do_Table,Replicate_Ignore_Table,Replicate_Wild_Do_Table,Replicate_Wild_Ignore_Table

使用--replicate-do-table,--replicate-ignore-table,--replicate-wild-do-table和--replicate-wild-ignore_table选项指定的表清单。

Last_Errno,Last_Error

被多数最近被执行的查询返回的错误数量和错误消息。错误数量为0并且消息为空字符串意味着“没有错误”。如果Last_Error值不是空值,它也会在从属服务器的错误日志中作为消息显示。

举例说明:

Last_Errno: 1051

Last_Error: error 'Unknown table 'z'' on query 'drop table z'

该消息指示,表z曾经存在于在主服务器中并已被取消了,但是它没有在从属服务器中存在过,因此对于从属服务器,DROP TABLE失败。(举例说明,在设置复制时,如果您忘记了把此表拷贝到从属服务器中,则这有可能发生。)

Skip_Counter

最近被使用的用于SQL_SLAVE_SKIP_COUNTER的值。

Exec_Master_Log_Pos

来自主服务器的二进制日志的由SQL线程执行的上一个时间的位置(Relay_Master_Log_File)。在主服务器的二进制日志中的(Relay_Master_Log_File,Exec_Master_Log_Pos)对应于在中继日志中的(Relay_Log_File,Relay_Log_Pos)。

Relay_Log_Space

所有原有的中继日志结合起来的总大小。

Until_Condition,Until_Log_File,Until_Log_Pos

在START SLAVE语句的UNTIL子句中指定的值。

Until_Condition具有以下值:

如果没有指定UNTIL子句,则没有值

如果从属服务器正在读取,直到达到主服务器的二进制日志的给定位置为止,则值为Master

如果从属服务器正在读取,直到达到其中继日志的给定位置为止,则值为Relay

Until_Log_File和Until_Log_Pos用于指示日志文件名和位置值。日志文件名和位置值定义了SQL线程在哪个点中止执行。

Master_SSL_Allowed,Master_SSL_CA_File,Master_SSL_CA_Path,Master_SSL_Cert,Master_SSL_Cipher,Master_SSL_Key

这些字段显示了被从属服务器使用的参数。这些参数用于连接主服务器。

Master_SSL_Allowed具有以下值:

如果允许对主服务器进行SSL连接,则值为Yes

如果不允许对主服务器进行SSL连接,则值为No

如果允许SSL连接,但是从属服务器没有让SSL支持被启用,则值为Ignored。

与SSL有关的字段的值对应于--master-ca,--master-capath,--master-cert,--master-cipher和--master-key选项的值。

Seconds_Behind_Master

本字段是从属服务器“落后”多少的一个指示。当从属SQL线程正在运行时(处理更新),本字段为在主服务器上由此线程执行的最近的一个事件的时间标记开始,已经过的秒数。当此线程被从属服务器I/O线程赶上,并进入闲置状态,等待来自I/O线程的更多的事件时,本字段为零。总之,本字段测量从属服务器SQL线程和从属服务器I/O线程之间的时间差距,单位以秒计。

如果主服务器和从属服务器之间的网络连接较快,则从属服务器I/O线程会非常接近主服务器,所以本字段能够十分近似地指示,从属服务器SQL线程比主服务器落后多少。如果网络较慢,则这种指示不准确;从属SQL线程经常会赶上读取速度较慢地从属服务器I/O线程,因此,Seconds_Behind_Master经常显示值为0。即使I/O线程落后于主服务器时,也是如此。换句话说,本列只对速度快的网络有用。

即使主服务器和从属服务器不具有相同的时钟,时间差计算也会起作用(当从属服务器I/O线程启动时,计算时间差。并假定从此时以后,时间差保持不变)。如果从属SQL线程不运行,或者如果从属服务器I/O线程不运行或未与主服务器连接,则Seconds_Behind_Master为NULL(意义为“未知”)。举例说明,如果在重新连接之前,从属服务器I/O线程休眠了master-connect-retry秒,则显示NULL,因为从属服务器不知道主服务器正在做什么,也不能有把握地说落后多少。
属性解释参考:https://blog.csdn.net/shiqidide/article/details/7263652
  1. 停止:stop slave 即可
    至此从机配置完成。

测试数据

  1. 在101 主库上创建一个测试数据库:create database testMasterSlave;


    图片.png

    从库上面也同步了该库。

  2. 创建表,并插入数据:
    CREATE TABLE tb_emp (
    ID INT (11),
    NAME VARCHAR (25),
    deptId INT (11),
    salary FLOAT
    );


    图片.png
  3. 在100从库中 ,同步成功


    图片.png
  4. 如果想指定从库从哪个位置开始同步,需要重新设定 文件位置
    CHANGE MASTER TO MASTER_HOST='192.168.92.101', MASTER_USER='root', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=120;

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

推荐阅读更多精彩内容

  • 转载:https://www.cnblogs.com/alvin_xp/p/4162249.html Mysql主...
    Leo_df55阅读 431评论 0 1
  • 这篇博客会详细介绍如何配置主从配置,但重点是想分享如何当配置未成功时,如何调试。 原文连接(推荐这个看 比较清晰)...
    海里的沙丁鱼阅读 764评论 0 2
  • 一、实验目标 搭建两台MySQL服务器,一台作为主服务器,一台作为从服务器,主服务器进行写操作,从服务器进行读操作...
    丢了发型的男人阅读 662评论 0 4
  • 主从复制是为了加强系统数据库的可用性,当主库挂掉时,从数据库保存数据,数据不会丢失,将从库切换为主库,等主库弄好之...
    洋仔聊编程阅读 591评论 1 12
  • 夜,如墨一般滴在天空的画布上,渗透、晕开,用画笔轻点几下,便有了星辰,再描上几下,柔和的月光将射进你的心房。 城中...
    18文秘3刘靖珊阅读 373评论 0 0