mysql 未找到命令_MySQL主从复制配置说明,一文教你搞懂数据库主从复制
一,MySQL主从配置原理
1. mysql支持的复制格式
基于语句复制(STATEMENT)
- (优点)基于statement复制的优点很明显,简单的记录执行语句同步到从库执行同样的语句,占用磁盘空间小,网络传输快,并且通过mysqlbinlog工具容易读懂其中的内容 。
- (缺点)并不是所有语句都能复制的比如:insert into table1(create_time) values(now()),取的是数据当前时间,不同的数据可能时间不一致,另外像存储过程和触发器也可能存在问题。
基于行复制(ROW)
- (优点)从MySQL5.1开始支持基于行的复制,最大的好处是可以正确地复制每一行数据。一些语句可以被更加有效地复制,另外就是几乎没有基于行的复制模式无法处理的场景,对于所有的SQL构造、触发器、存储过程等都能正确执行。
- (缺点)主要的缺点就是二进制日志可能会很大,比如:update table1 set name='admin' where id<1000,基于行复制可能需要复制1000条记录,而基于语句复制只有一条语句,另外一个缺点就是不直观,所以,你不能使用mysqlbinlog来查看二进制日志。
混合类型的复制(MIXED)
- 混合复制是借用语句复制和行复制的有点进行整合,MIXED也是MySQL默认使用的二进制日志记录方式,但MIXED格式默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。比如用到UUID()、USER()、CURRENT_USER()、ROW_COUNT()等无法确定的函数。
2. mysql主从复制作用
- 数据分布
- 主从分摊负载。
- 高可用性和故障切换。
- 数据备份。
- 利用从服务器做查询。
3. mysql主从复制原理
- binlog Events 我们知道binlog日志用于记录所有对MySQL的操作的变更,而这每一个变更都会对应的事件,也就是Event。index文件记录了所有的binlog位置 每个binlog会有heade, event,rotate三个event,binlog的结构如下。
常见event如下:
- Format_desc:一个全新的binlog日志文件event信息
- Rotate :日志分割时结束event。
- Table_map:表,列等元数据的event。
- Query:查询,就是DDL这类的Event,如果binlog格式为STATEMENT格式,增删改都属于Qeury event。
- Write_rows:Binlog为ROW格式时的插入event。
- Update_rows:Binlog为ROW格式时的更新event。
- Delete_rows:Binlog为ROW格式时的删除event。
我们也可以通过binlog 看到这些事件,通过mysql提供的工具查看binlog日志,如下:
主从复制流程
- 当从库发出 start slave命令时,从库会创建I/O线程和SQL thread(SQL线程)
- 从库的IO和主库的dump线程建立连接 并监听binlog二进制日志事件
- 从库根据change master to 语句提供的file名和position号,IO线程向主库发起binlog的请求
- 主库dump线程根据从库的请求,将本地binlog以events的方式发给从库IO线程
- 从库IO线程接收binlog evnets,并存放到本地relay-log中,传送过来的信息,会记录到http://master.info中。
- 从库SQL线程应用relay-log,并且把应用过的记录到relay-log.info,默认情况下,已经应用过的relay会自动被清理purge。
二,MySQL只从配置缺陷
MySQL的复制(replication)功能配置简单,深受开发人员的喜欢,基于复制的读写分离方案也非常流行。而MySQL数据库高可用大多也是基于复制技术,但是MySQL复制本身依然存在部分缺陷,最为主要的问题如下:
复制代码
- 数据丢失问题(consistency)
- 数据同步延迟问题(delay)
- 扩展性问题(scalability)
从MySQL 5.7的lossless semi-sync replication已经解决了主从数据丢失的问题,MySQL 5.7的multi-thread slave也很大程度地解决了数据同步延迟的问题,MySQL 5.7的Group replication也很大程度地解决了扩展性问题。另外,MySQL 5.7.22 backlog了MySQL 8.0中的基于WriteSet的并行复制,可以说完全解决了主从数据延迟的问题。可以看出,MySQL正在朝着一个非常好的方向发展
三,准备工作
准备3台服务器分别为:
Master 192.168.1.234
Slave 192.168.1.235
Slave 192.168.1.236
四,MySQL安装配置
下载MySQL安装包
下载地址:cdn.mysql.com//Downloads/…
解压安装文件:
[root@localhost ~]# cd /software[root@localhost software]# tar -zxzf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz
复制代码
拷贝安装文件到指定文件夹:
[root@localhost ~]# cp /software/mysql-5.7.17-linux-glibc2.5-x86_64/* /usr/local/mysql -r
复制代码
添加系统mysql组和mysql用户
[root@localhost ~]# groupadd mysql[root@localhost ~]# useradd -r -g mysql mysql
复制代码
进入安装mysql软件目录:执行命令 cd /usr/local/mysql
修改当前目录拥有者为mysql用户:执行命令 chown -R mysql:mysql ./
安装数据库:
5.6以及之前版本安装数据库
/usr/local/mysql/bin/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
5.7版本安装数据库:
/usr/local/mysql/bin/mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/ --initialize
拷贝配置文件到指定文件夹
[root@localhost mysql]# cp -a ./support-files/my-default.cnf /etc/my.cnf
[root@localhost mysql]# cp -a ./support-files/mysql.server /etc/init.d/mysqld
后台启动mysql
[root@localhost mysql]# ./bin/mysqld_safe --user=mysql &
重启mysql
执行命令: /etc/init.d/mysqld restart
设置为开机启动:
执行命令:chkconfig --level 35 mysqld on
初始化密码:
依据官方说明5.6以后版本,第一次启动时会在root目录下生产一个随机密码文件名.mysql_secret。
cat /root/.mysql_secret
修改root密码:
/usr/local/mysql/bin/mysqladmin -u root -h localhost password '123456' -p
Enter password处输入输入.mysql_secret里第二行内容
遇上-bash: mysql: command not found(未找到命令)的情况别着急,这个是因为/usr/local/bin目录下缺失mysql导致,只需要一下方法建立软链接,即可以解决
ln -s /usr/local/mysql/bin/mysql /usr/bin
五,MySQL主从复制配置
下载MySQL安装包
Master服务器my.cnf增加配置:
#GTID:server_id=234 #服务器id,一般为IP末位gtid_mode=on #开启gtid模式enforce_gtid_consistency=on #强制gtid一致性,开启后对于特定create table不被支持 #binloglog_bin=/usr/local/mysql/binlogs/master-binloglog-slave-updates=1 binlog_format=row #强烈建议,其他格式可能造成数据不一致 #relay logskip_slave_start=1
复制代码
Slave服务器my.cnf增加配置:
#GTID:gtid_mode=onenforce_gtid_consistency=onserver_id=235 #binloglog-bin=/usr/local/mysql/binlogs/slave-binloglog-slave-updates=1binlog_format=row #强烈建议,其他格式可能造成数据不一致 #relay logskip_slave_start=1read-only = ON #这项功能只对非管理员组以为的用户有效
复制代码
在Master服务器上创建用于同步的账号:
create user 'cspmslave'@'192.168.1.%' identified by 'cspm-slave';
对账号进行Slave授权:
grant replication slave on . to cspmslave@'192.168.1.%';
从库连接主库
mysql> change master to master_host='192.168.1.234', master_port=3306, master_user='cspmslave', master_password='cspm-slave', master_auto_position=1;
mysql> start slave;
查看从服务器连接状态(下图所示,两个Yes表示连接成功):
mysql> show slave status G;
作者:小林啊
链接:https://juejin.cn/post/6907499323810906126
来源:掘金
侵删
mysql 未找到命令_MySQL主从复制配置说明,一文教你搞懂数据库主从复制相关推荐
- nvidia:未找到命令
nvidia:未找到命令,一个笨笨的错误_天๑的博客-CSDN博客_nvidia:未找到命令 nvidia-smi 报错:无法与 nvidia driver 通信 - 知乎
- python:未找到命令
参考下面的文章: python:未找到命令_无色云的博客-CSDN博客https://blog.csdn.net/weixin_38669561/article/details/103010621这样 ...
- 关于 $'\r': 未找到命令的解决(bad interpreter )
之前我在ubuntu上跑代码时,当运行一个shell脚本的时候,出现了如下错误 ../runcmake: 行 2: $'\r': 未找到命令 ../runcmake: 行 3: 未预期的符号 `$'{ ...
- 在Mac终端下使用conda命令提示未找到命令conda
问题 Mac版Anaconda安装完之后,在终端中输入:conda --version,查看anaconda版本,提示:zsh: command not found: conda,即未找到命令cond ...
- Ubuntu之bashrc:成功解决Ubuntu系统内出现的conda:未找到命令
Ubuntu之bashrc:成功解决Ubuntu系统内出现的conda:未找到命令 目录 解决问题 解决思路 解决方法 解决问题 解决思路 之所以会出现是因为安装的过程中,选择了默认的no而不是yes ...
- 【Anaconda】conda :未找到命令
conda :未找到命令 安装完anaconda之后出现报错 解法1:系统没有为conda添加环境变量,这个时候可以进入.bashrc进行添加环境变量 .bashrc 用来存储加载终端配置和环境变量 ...
- 「Jupyter」ubuntu下安装jupyterlab后jupyterlab:未找到命令
系统:Ubuntu 18.04 第一步 安装jupyterlab 在终端中通过pip安装,也可以用conda等,具体见官网(JupyterLab安装说明),安装命令如下: pip install ju ...
- 报错:“-bash: git: 未找到命令”
报错:"-bash: git: 未找到命令" 解决方法: 安装git命令即可解决问题,Linux百科网是以CentOS 7 64位系统为例,在安装git命令之前需要先启用EPEL存 ...
- oracle dbstart,dbstart: 未找到命令
oracle 12c在centos最小化下安装后,数据库不随机启动, 按照网上的教程,编辑了/etc/oratab文件 增加了rc.local文件 结果还是不随机启动,通过: systemctl st ...
最新文章
- oracle如何查询虚拟列,Oracle11g新特性之--虚拟列(VirtualColumn)
- python 自定义模块_Python 自定义模块路径
- 2021-10-15 红黑树 概念和平衡操作理解以及与AVL对比分析 恋上数据结构笔记
- Ajax发送formdata数据,SpringMVC后台处理
- WebAPI返回数据类型
- System.Drawing.Common workaround in .NET6
- tf.placeholder()
- 基于实时计算(Flink)与高斯模型构建实时异常检测系统
- 图解MySQL5.5详细安装与配置过程
- solidity合约详解
- 深入浅出TensorFlow(二):TensorFlow解决MNIST问题入门
- 如何在树莓派上安装Fedora 25
- 【1】ArcGIS API for JavaScript 4.5/4.6 本地部署
- 阿里架构师必学的2019最新资料!首次公布
- 在eclipse部署OpenBravo项目
- 计算机组策略定时开机脚本,批处理+组策略 实现规定时间段无法开机and定时关机...
- 灵雀云ACP成功通过金融信创生态实验室适配验证
- 获取手机的流量信息 /proc/pid/net/dev
- 机器学习笔试面试系列算法集锦
- Ubuntu18.04 安装 Idea 2018.2 Ultimate
热门文章
- 聊一聊mongodb中的 explain 和 hint
- 使用 Visual Studio 2019 批量添加代码文件头
- ASP.NET Core中的内存缓存
- dotNET Core 3.X 依赖注入
- 【Magicodes.IE 2.0.0-beta1版本发布】已支持数据表格、列筛选器和Sheet拆分
- .NET斗鱼直播弹幕客户端(上)
- 打不死我的,终将使我强大!DevOps黑客马拉松参赛心得
- ASP.NET Core 3.0预览版体验
- 如何在你的项目中集成 CAP【手把手视频教程】
- Quartz.Net分布式任务管理平台(第二版)