1、搭建说明
准备工作:主从库已安装mysql软件以及xtracbackup备份工具。具体操作可参见mysql rpm安装文档。

介质 版本
操作系统 Red Hat Enterprise Linux Server release 6.8 (Santiago)
数据库 MySQL-5.6.30
角色 IP
主库 172.16.81.90
从库 172.16.81.76
2、主库操作
2.1 创建复制用户

mysql> GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO repl@'172.16.81.76' IDENTIFIED BY 'repl_1234';
mysql> flush privileges;

2.2 开启binlog(若已开启则不需要操作)

# vi /usr/my.cnf
#增加以下内容
[mysqld]
log-bin=mysqlbin
expire_logs_days=7

重启数据库

# service mysql restart

2.3主库备份

创建备份目录
# mkdir /data/backup/
全库备份
# innobackupex --defaults-file=/etc/my.cnf --user=root --password="niwodai#2017" --socket=/var/lib/mysql/mysql.sock /data/backup/ --no-timestamp
单库备份
# innobackupex --user=root --password="niwodai#2017" --socket=/var/lib/mysql/mysql.sock --defaults-file=/usr/my.cnf /data/backup/ --no-timestamp --database=wjf
打包备份,传到从库(临时存放在/tmp目录下)
# cd /data/
# tar -cvzf backup_master.tar.gz backup/
# scp backup_master.tar.gz root@172.16.81.76:/tmp/
2.4 参数配置
# vi /usr/my.cnf

#增加如下内容
[mysqld]
server-id=129
relay-log=mymaster-relay-bin
# binlog-do-db=wjf
# binlog-ignore-db=test
replicate_do_db=wjf
#replicate-ignore-db=test

log-slave-updates=1
replicate-same-server-id=0

master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_purge=1
relay_log_recovery=1


server-id 是必须的,而且需唯一。
对于mysql 5.6,更新5张系统表的默认存储引擎为innodb。(changer master时报错才操作)

mysql> ues mysql;
mysql> show tables;
删除表
drop table if exists innodb_index_stats;
drop table if exists innodb_table_stats;
drop table if exists slave_master_info;
drop table if exists slave_relay_log_info;
drop table if exists slave_worker_info;
进入datadir,删除对应文件
cd /var/lib/mysql/mysql

rm innodb_index_stats.ibd
rm innodb_table_stats.ibd
rm slave_master_info.ibd
rm slave_relay_log_info.ibd
rm slave_worker_info.ibd

重建以上表
mysql> use mysql;
mysql> source /usr/share/mysql/mysql_system_tables.sql
mysql> show tables;
确认表是否新建成功。
查看配置 mysql> show master status \G;
3、从库操作
3.1 备份恢复
# mkdir /data/
# mv /tmp/backup_master.tar.gz /data/
# tar -xvzf backup_master.tar.gz
# cd /data/backup/
恢复备份文件至可用状态
# innobackupex --apply-log --user=root --password=niwodai#2017 --port=3606 /data/backup/
停止mysql服务
# service mysql stop
重命名原datadir目录
# mv /data/mysql /data/mysql_bak
恢复数据到datadir
# innobackupex --copy-back --user=root --password=niwodai#2017 /data/backup/
170610 18:25:11 completed OK!
修改恢复后datadir目录权限
# chown -R mysql:mysql /data/mysql/
3.2 参数配置
# vi /etc/my.cnf

#添加如下配置
#add for slave
server-id=230
log-slave-updates=1
replicate-same-server-id=0

log-bin=myslavebin
expire-logs-days=7
relay-log=myslave-relay-bin
replicate_do_db=wjf
#replicate-ignore-db=test

master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_purge=1
relay_log_recovery=1

read-only=1
对于mysql 5.6,更新5张系统表的默认存储引擎为innodb。(若表当前引擎为innodb,可以不操作) mysql> ues mysql;
mysql> show tables;
删除表
drop table if exists innodb_index_stats;
drop table if exists innodb_table_stats;
drop table if exists slave_master_info;
drop table if exists slave_relay_log_info;
drop table if exists slave_worker_info;
进入datadir,删除对应文件
cd /var/lib/mysql/mysql

rm innodb_index_stats.ibd
rm innodb_table_stats.ibd
rm slave_master_info.ibd
rm slave_relay_log_info.ibd
rm slave_worker_info.ibd

重建以上表
mysql> use mysql;
mysql> source /usr/share/mysql/mysql_system_tables.sql
mysql> show tables;
确认表是否新建成功。
重启服务器 # service mysql restart
配置change master to 提取MASTER_LOG_FILE、MASTER_LOG_POS参数。
# cd /data/backup/
# more xtrabackup_binlog_info
mysqlbin.000004 211678

配置

mysql> CHANGE MASTER TO MASTER_HOST='172.16.81.90',
MASTER_USER='repl',
MASTER_PASSWORD='repl_1234',
MASTER_LOG_FILE='mysqlbin.000004',
MASTER_LOG_POS=211678;

3.3 启停从库
启动从库
mysql> start slave;
停止从库
mysql> stop slave;
从库状态确认
mysql> show slave status \G;


(额外部分)
从库的IO_thread、sql_thread可以单独启停。命令如下:
mysql> start slave io_thread;
mysql> start slave sql_thread;
4、主从切换
4.1 切换前状态检查
#----主库操作
锁定所有表为只读模式。
mysql> flush tables with read lock;
状态查看
mysql> show processlist;
传输线程显示Master has sent all binlog to slave; waiting for binlog to be updated

#----从库操作
mysql> show processlist;
显示Slave has read all relay log; waiting for the slave I/O thread to update it
4.2 切换
原从库(81.76)操作 #-----原从库(81.76)操作
mysql> stop slave;
mysql> reset master;
mysql> reset slave all;
#-----切换后检查
mysql> show master status\G;
#-----创建复制用户
mysql> GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO repl@'172.16.81.90' IDENTIFIED BY 'replpwd';
mysql> flush privileges;
#-----注释掉read_only参数
# vi /etc/my.cnf
#read-only=1
#-------重启数据库
# service mysql restart
记录一下两个位置参数,用于主库变从库时的change master to设置。 原主库(81.90)操作 #-------原主库(81.90)操作
mysql> CHANGE MASTER TO MASTER_HOST='172.16.81.76',
MASTER_USER='repl',
MASTER_PASSWORD='replpwd',
MASTER_LOG_FILE='mysqlbin.000001',
MASTER_LOG_POS=638;
#------启动从库
mysql> start slave;
#------查看从库状态
mysql> show slave status;
#------解锁表
mysql> unlock tables;

若需要设置从库只读,还需要修改/usr/my.cnf文件
添加参数后重启。
read-only=1

mysql主从搭建操作的更多相关文章

  1. ### MySQL主从搭建Position

    一.MySQL主从搭建 搭建主从架构的MySQL常用的有两种实现方式: 基于binlog的fileName + postion模式完成主从同步. 基于gtid完成主从同步搭建. 本篇就介绍如何使用第一 ...

  2. mysql 主从搭建步骤

    mysql 主从搭建步骤 1:主库开启master端bin-log 2:主库创建备份用户 3:主库全备 4:从库导入全备数据 5:从库修改change master to信息 6:从库slave st ...

  3. SQL Server、MySQL主从搭建,EF Core读写分离代码实现

    一.SQL Server的主从复制搭建 1.1.SQL Server主从复制结构图 SQL Server的主从通过发布订阅来实现 1.2.基于SQL Server2016实现主从 新建一个主库&quo ...

  4. MySQL主从搭建

    主服务器配置 1.编辑配置文件 # 如果不存在,就手动创建一个 vim /etc/my.cnf 在配置文件加入如下值: [mysqld] # 唯一的服务辨识号,数值位于 1 到 2^32-1之间. # ...

  5. 利用mk-table-checksum监测Mysql主从数据一致性操作记录

    前面已经提到了mysql主从环境下数据一致性检查:mysql主从同步(3)-percona-toolkit工具(数据一致性监测.延迟监控)使用梳理今天这里再介绍另一种Mysql数据一致性自动检测工具: ...

  6. MySql主从搭建详细步骤

    环境: linux64位,一台机器两个实例,主库3306端口,从库3307端口 步骤: 一.下载安装 先下载安装mysql,这里使用了5.7.21版本,具体过程不做详细说明,可自行查资料如何下载 二. ...

  7. mysql主从搭建之诡异事件

    今天在搭建主从后出现了主库system账号丢失INSERT权限的情况,记录如下 主库: system账号权限同root权限,并且mysql库已经删除 从库: mysql库存在,无system账号 主从 ...

  8. MariaDB(Mysql)-主从搭建

    卸载过程: 停止服务:systemctl stop mariadb 查询安装包:rpm -qa | grep mariadb 卸载: rpm -e mariadb-server rpm -e mari ...

  9. mysql 主从搭建

    主要搭建步骤如下: 1.打开binlog,设置server_id     打开主库的--log-bin,并设置server_id 2.主库授权                --最好也在从库对主库授权 ...

随机推荐

  1. (Java实现) 洛谷 P1031 均分纸牌

    题目描述 有NN堆纸牌,编号分别为 1,2,-,N1,2,-,N.每堆上有若干张,但纸牌总数必为NN的倍数.可以在任一堆上取若干张纸牌,然后移动. 移牌规则为:在编号为11堆上取的纸牌,只能移到编号为 ...

  2. Java实现 LeetCode 724 寻找数组的中心索引(暴力)

    724. 寻找数组的中心索引 给定一个整数类型的数组 nums,请编写一个能够返回数组"中心索引"的方法. 我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧 ...

  3. Java实现 LeetCode 609 在系统中查找重复文件(阅读理解+暴力大法)

    609. 在系统中查找重复文件 给定一个目录信息列表,包括目录路径,以及该目录中的所有包含内容的文件,您需要找到文件系统中的所有重复文件组的路径.一组重复的文件至少包括二个具有完全相同内容的文件. 输 ...

  4. Java中System的详细用法

    System.arraycopy System.arraycopy的函数原型是: public static void arraycopy(Object src, int srcPos, Object ...

  5. Java中抽象类与接口的详细说明

    首先简单的介绍一下抽象类: 定义是很简单的,我们这里不写官方的语言,我自己看着都烦,我们就用白话介绍,抽象类本质是一个类,没问题,那么类里面一般都是有方法的,方法包括方法名和方法体,这是常识对不对,那 ...

  6. java实现识别复制串

    ** 识别复制串** 代码的目标:判断一个串是否为某个基本串的简单复制构成的. 例如: abcabcabc,它由"abc"复制3次构成,则程序输出:abc aa 由"a& ...

  7. java实现第六届蓝桥杯奇怪的数列

    奇怪的数列 从X星截获一份电码,是一些数字,如下: 13 1113 3113 132113 1113122113 - YY博士经彻夜研究,发现了规律: 第一行的数字随便是什么,以后每一行都是对上一行& ...

  8. PAT 程序运行时间

    要获得一个 C 语言程序的运行时间,常用的方法是调用头文件 time.h,其中提供了 clock() 函数,可以捕捉从程序开始运行到 clock() 被调用时所耗费的时间.这个时间单位是 clock ...

  9. awardRotate转盘插件文字模糊问题和图片加载问题

    前言 最近在做一个转盘抽奖页面,使用了awardRotate.js发现字体和图片都有模糊,绘制的时候图片绘制不全,搜索一下之后发现针对awardRotate的解决方法比较少,针对canvas的比较多, ...

  10. OC 语言特点以及与其他语言的区别

    OC 作为一门面向对象的语言,兼容c语言的语法,又有区别于其他面向对象语言的地方: 特点: 1.使用自动释放池,通过引用计数处理对象的内存管理. 2.拥有id这种通用对象类型. 3.分类,功能强大,不 ...