博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql主从同步实战(一)【知其然】
阅读量:7251 次
发布时间:2019-06-29

本文共 4237 字,大约阅读时间需要 14 分钟。

前言

Mysql主从同步实战,知其然,知其所以然也是很重要的,不然你永远无法进阶,但是,俗话说学会走前要学会爬,在大多数的中小型公司中,业务需要用到某一项技术,是没有太多的时间给你慢慢研究其原理的,大多是囫囵吞枣的看一下,找点攻略,快速搭建起来,先干活再说,至于后期的扩展和优化那就是慢慢来的事情,事有轻重缓急,我们要结合自身所处的环境来调整才能不断的前行,那么今天我们就来爬一爬

实战

准备

软件

mysql5.7.2

硬件
主机配置 IP地址 操作系统 用途 部署路径
2.6GHz(1core)内存2G 10.211.55.7 Centos7.0 mysql-masterr /usr/local/mysql
2.6GHz(1core)内存2G 10.211.55.13 Centos7.0 mysql-slave /usr/local/mysql

部署

mysql安装

# 上传mysql的tar包re -be # 解压上传的命令tar -xvf  https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.25-linux-glibc2.12-x86_64.tarcd  https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.25-linux-glibc2.12-x86_64# 创建mysql安装以及数据保存的目录mkdir /usr/local/mysqlmkdir /usr/local/mysql/data  mv * /usr/local/mysql# 删除可能存在的mysql rpm包rpm -qa|grep -i mysqlrpm -qa | grep maridbyum remove  mysql mysql-server mysql-libs mysql-serverrpm -e --nodeps `rpm -qa | grep mysql`rpm -e --nodeps `rpm -qa | grep maridb`# 知道可能遗留的mysql相关文件,rm掉find / -name mysql rpm -qa|grep mysql# 因为我们是使用源码的方式安装,所有需要创建mysql用户组userdel mysql groupdel mysqlgroupadd mysql    mkdir /usr/local/mysqluseradd -g mysql -d /usr/local/mysql mysql # 编译源码sh /usr/local/mysql/bin/mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --initialize# 编译成功后会在控制台看到打印的mysql的临时密码,记住,后面需要用到# 启动mysqlsh /usr/local/mysql/support-files/mysql.server start# 控制台打印success成功启动# 创建mysql客户端软链接ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql# 修改密码,输入上面步骤控制台打印的临时密码mysql -u root -pset password = password("mysql");# 刷新缓存flush privileges;# 授权远程访问grant all privileges on *.* to 'root'@'%' identified by 'mysql';# 查看防火墙状态firewall-cmd --state# 停止防火请systemctl stop firewalld.service# 禁止防火墙开机启动systemctl disable firewalld.service # 配置mysql服务开机自动启动cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld # 增加执行权限,检查开机启动列表,没有则加入chmod 755 /etc/init.d/mysqldchkconfig --list mysqld chkconfig --add mysqldchkconfig mysqld on# 以后mysql的启动就可以使用下面命令启动停止了service mysqld start/stop/restart复制代码

配置一

mysql-master配置

遇到的问题:

1:很多文章都会告诉你在 /etc/ 或者 安装目录的support-file下面有my.cnf配置文件,但是我们安装版本为5.7的时候怎么都找不到,后来经过查阅资料,发现5.7版本的mysql已经不自带这个配置文件了,所以需要自己手动配置

touch /etc/my.cnfchmod 644 /etc/my.cnf# 如果遇到权限问题请使用root账户vim /etc/my.cnf# 写入内容# mysql主节点编号[mysqld] server-id = 1 #Mysql服务的唯一编号 每个mysql服务Id需唯一log-bin=mysql-bin # logbin的名字binlog-do-db=test03 #需要同步的数据库的名字binlog-do-db=test05 #需要同步的数据库的名字binlog-ignore-db=test01 #不需要同步的数据库的名字log-slave-updates=1 # log更新间隔slave-skip-errors=1 # 是跳过错误,继续执行复制操作(可选)复制代码

mysql-slave配置

[mysqld] #Mysql服务的唯一编号 每个mysql服务Id需唯一server-id = 2# read_only=1只读模式,可以限定普通用户进行数据修改的操作,但不会限定具有super权限的用户(如超级管理员root用户)的数据修改操作。如果想保证super用户也不能写操作,就可以就需要执行给所有的表加读锁的命令 “flush tables with read lock;”read_only = 1复制代码

重启 service mysqld restart

配置二

mysql-master配置

[mysqld] #Mysql服务的唯一编号 每个mysql服务Id需唯一server-id = 1log-bin=mysql-bin # logbin的名字复制代码

mysql-slave配置

[mysqld] #Mysql服务的唯一编号 每个mysql服务Id需唯一server-id = 2# read_only=1只读模式,可以限定普通用户进行数据修改的操作,但不会限定具有super权限的用户(如超级管理员root用户)的数据修改操作。如果想保证super用户也不能写操作,就可以就需要执行给所有的表加读锁的命令 “flush tables with read lock;”read_only = 1replicate-do-db=test02 #需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可replicate-ignore-db=test05 #需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可复制代码

重启 service mysqld restart

设置主从同步

操作主数据库

1:使用root用户进入mysql创建同步的账户并且赋权

CREATE USER 'slave'@'%' IDENTIFIED BY 'mysql';GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';FLUSH PRIVILEGES;# 查看赋权状态use mysql;select  User,authentication_string,Host from user;复制代码

# 查看 日志开启状态show variables like 'log_bin';复制代码

成功开启

# 查看主节点状态show master status;复制代码

记住file那么的名字和position的值,因为主从同步,从数据库是通过读取主数据库的日志文件来完成同步的,所以需要文件名字和日志的当前位置

操作从数据库

# 停止正在进行的slave(如果有,此方法也用于修改slave的值(如果参数不对))stop slave;# 需要主机名,上面步骤的账户密码以及日志文件名字和位置(请根据实际情况自行修改)change master to master_host='10.211.55.7', master_user='slave', master_password='mysql', master_log_file='mysql-bin.000003', master_log_pos=1639;# 启动start slave;# 查看状态show slave status\G;复制代码

如果一切配置正常那么则会看到:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

如果遇到 no的情况一般会原因有:
1:机器网络不通
2:配置项写错,例如ip,密码等
3:防火墙问题

优劣势对比

在master上设置binlog_do_弊端:

1、过滤操作带来的负载都在master上
2、无法做基于时间点的复制(利用binlog)
建议使用配置二,但是我使用的是配置一

测试

分别查询主从数据库

use test03;select * from test01;复制代码

在主数据库插入一条数据

查询从数据库

主从同步成功

总结

今天的实战就这么结束了,怎么样有没有收获,那么现在我们学会了爬,下一篇文档我们就要学一学怎么走,怎么跑了,下篇预告MySQL主从同步知其然,知其所以然。

参考博客:

mysql安装

转载于:https://juejin.im/post/5c9d8109f265da612f1bb019

你可能感兴趣的文章
byobu相关操作
查看>>
父页面操作嵌套iframe子页面的HTML标签元素
查看>>
在TSQL中用case,when之类同时查多种情况
查看>>
Math,random()返回区间内的随机数
查看>>
TCP/IP网络协议的通俗理解,socket,http,soap
查看>>
简单数论
查看>>
Linux 文件系统
查看>>
更换你的Chrome开发工具风格
查看>>
调度任务(五)
查看>>
化工厂装箱员 洛谷 p2530
查看>>
代码替换修复总结
查看>>
ubuntu 14.04 LTS 右键菜单解压压缩包时出错
查看>>
SVN服务器搭建--Subversio与TortoiseSVN的配置安装
查看>>
2017-2018-1 20155301 《信息安全系统设计基础》第八周学习总结
查看>>
jquery ajax 提交表单(file && input)
查看>>
mysql中BIT_COUNT BIT_OR
查看>>
HDU 1317(Floyd判断连通性+spfa判断正环)
查看>>
Mysql 查询缓存
查看>>
python入门の缩进魔术
查看>>
DP专题
查看>>