MySQL从安装到弃坑

MySQL从安装到弃坑

大哥的文章

安装

一、yum安装
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
rpm -ivh mysql80-community-release-el7-3.noarch.rpm
yum -y install yum-utils
vim /etc/yum.repos.d/mysql-community.repo
改成下面这样

在这里插入图片描述

或者这样

yum-config-manager --enable mysql57-community
yum-config-manager --disable mysql80-community
yum install -y mysql-community-server
systemctl start mysqld
systemctl enable mysqld
grep password /var/log/mysqld.log
2019-08-18T14:03:51.991454Z 1 [Note] A temporary password is generated for root@localhost: woHtkMgau9,w

woHtkMgau9,w 就是密码

破解密码

如果上面的命令无法找到密码,可以进行下列操作免密登录    修改完毕后记得注释或删除修改
vim /etc/my.cnf
必须在[mysqld]下面加入
skip-grant-tables

在这里插入图片描述

修改密码

进入数据库后进行操作
use mysql;
update user set authentication_string=password('QianFeng@123') where user='root';
flush privileges;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'QianFeng@123';
方法二
mysqladmin -uroot -p'旧密码' password '新密码'
二、编译安装
1、清理安装环境:
yum erase mariadb mariadb-server mariadb-libs mariadb-devel -y
userdel -r mysql
rm -rf /etc/my*
rm -rf /var/lib/mysql
2、创建mysql用户
useradd -r mysql -M -s /bin/false
3、从官网下载tar包
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.27.tar.gz
4、安装编译工具
yum -y install ncurses ncurses-devel openssl-devel bison gcc gcc-c++ make
yum -y install cmake
5、创建mysql目录
mkdir -p /usr/local/{data,mysql,log}
6、解压
tar xzvf mysql-boost-5.7.27.tar.gz -C /usr/local/
注:如果安装的MySQL5.7及以上的版本,在编译安装之前需要安装boost,因为高版本mysql需要boots库的安装才可以正常运行。否则会报CMake Error at cmake/boost.cmake:81错误
安装包里面自带boost包
7、编译安装
cd /usr/local/mysql-5.7.27/

cmake . \
-DWITH_BOOST=boost/boost_1_59_0/ \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DSYSCONFDIR=/etc \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DINSTALL_MANDIR=/usr/share/man \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1

make && make install
如果安装出错,想重新安装:
不用重新解压,只需要删除安装目录中的缓存文件CMakeCache.txt
提示:boost也可以使用如下指令自动下载,如果不下载bost压缩包,把下面的这一条添加到配置中第二行
-DDOWNLOAD_BOOST=1/
参数详解:
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \   安装目录
-DSYSCONFDIR=/etc \   配置文件存放 (默认可以不安装配置文件)
-DMYSQL_DATADIR=/usr/local/mysql/data \   数据目录   错误日志文件也会在这个目录
-DINSTALL_MANDIR=/usr/share/man \     帮助文档 
-DMYSQL_TCP_PORT=3306 \     默认端口
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \  sock文件位置,用来做网络通信的,客户端连接服务器的时候用
-DDEFAULT_CHARSET=utf8 \    默认字符集。字符集的支持,可以调
-DEXTRA_CHARSETS=all \   扩展的字符集支持所有的
-DDEFAULT_COLLATION=utf8_general_ci \  支持的
-DWITH_READLINE=1 \    上下翻历史命令
-DWITH_SSL=system \    使用私钥和证书登陆(公钥)  可以加密。 适用与长连接。坏处:速度慢
-DWITH_EMBEDDED_SERVER=1 \   嵌入式数据库
-DENABLED_LOCAL_INFILE=1 \    从本地倒入数据,不是备份和恢复。
-DWITH_INNOBASE_STORAGE_ENGINE=1  默认的存储引擎,支持外键

**需要很长时间!**大约半小时

8、初始化
cd /usr/local/mysql
chown -R mysql.mysql .
./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
                                                  ---初始化完成之后,一定要记住提示最后的密码用于登陆或者修改密码
vim /etc/my.cnf    ---将文件中所有内容注释掉再添加如下内容
[client]
port = 3306
socket = /tmp/mysql.sock
default-character-set = utf8

[mysqld]
port = 3306
user = mysql
basedir = /usr/local/mysql  #指定安装目录
datadir = /usr/local/mysql/data  #指定数据存放目录
socket = /tmp/mysql.sock
character_set_server = utf8
参数详解:
[client]
# 默认连接端口
port = 3306
# 用于本地连接的socket套接字
socket = /tmp/mysql.sock
# 编码
default-character-set = utf8

[mysqld]
# 服务端口号,默认3306
port = 3306
# mysql启动用户
user = mysql
# mysql安装根目录
basedir = /usr/local/mysql
# mysql数据文件所在位置
datadir = /usr/local/mysql/data
# 为MySQL客户端程序和服务器之间的本地通讯指定一个套接字文件
socket = /tmp/mysql.sock
# 数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character_set_server = utf8
9、启动mysql
cd /usr/local/mysql
./bin/mysqld_safe --user=mysql &
10、登录mysql
/usr/local/mysql/bin/mysql -uroot -p'密码'
11、修改密码
/usr/local/mysql/bin/mysqladmin -u root -p'密码'  password 'QianFeng@123'
12、添加环境变量
vim /etc/profile    ---添加如下
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin

source /etc/profile
之后就可以在任何地方使用mysql命令登陆Mysql服务器:

mysql -uroot -p'QianFeng@123'
13、配置mysqld服务的管理工具:
cd /usr/local/mysql/support-files/
cp mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on

/etc/init.d/mysqld start

netstat -lntp
/etc/init.d/mysqld stop  
三、两种不同方式安装的目录区别
编译安装:
# ls
COPYING       README       bin   include  mysql-test  support-files
COPYING-test  README-test  docs  lib      share

1、bin目录
用于放置一些可执行文件,如mysql、mysqld、mysqlbinlog等。
2、include目录
用于放置一些头文件,如:mysql.h、mysql_ername.h等。
3、lib目录
用于放置一系列库文件。
4、share目录
用于存放字符集、语言等信息。

yum安装:
/var/lib/mysql    #存放数据文件
/usr/share/mysql  #用于存放字符集、语言等信息。

基础

登录

mysql -u用户名 -p密码 -h指定IP -e非交互模式下执行sql语句
密码最好用''括住
例子:
mysql -uroot -p'123' -h 123.123.123.123 -e "show databases;"

基础语句

数据库管理
-- 查看所有数据库
show databases;
-- 查看已有库
show databases like '搜索的库名'
-- 查看当前数据库
select database();
-- 查看创库语句(库名不需要加引号)
show create database 库名;

-- 删除库,同时删除该数据库相关的目录及其目录内容
drop database 库名;

-- 显示当前时间、用户名、数据库版本
SELECT now(), user(), version();

-- 创建数据库
create database 库名;
-- 创建数据库时指定默认引擎、编码集(character set 或者 charset )和校对集(collate)
ENGINE=InnoDB 
# utf-8
create database 库名 default charset utf8mb4 clloate utf8mb4_general_ci;
# gbk
create database 库名 default character set gbk clloate gbk_chinese_ci;

-- 切换数据库
use 库名;

-- 查看状态
status;
表管理
-- 查看表
show tables;   //需要进入某个库中
show tables from 库;  //不需要进入库中

-- 创建表
create table 表名(字段名 数据类型 参数选项,字段名 数据类型)charset=utf8;   //需要进入某个库中

-- 查看字段
desc 表名;

-- 添加字段-单个
alter table 表名 add 字段 类型;
-- 添加字段-多个
alter table 表名 add (字段一 类型,字段二 类型);
-- 添加字段-指定位置
alter table 表名 add 字段 类型 after 指定字段;

-- 修改字段
alter table 表名 change 原字段 新字段名 类型;
-- 修改字段-修改字段到指定位置
alter table 表名 change 原字段 新字段名 类型  after 指定字段;

-- 删除字段


数据类型
  • 整型:int bigint

  • 浮点型:float

    字段名 float(5,2) 五位 小数占两位

  • 字符串类型:char varchar

    数据库中 数据类型 (字符串) char varchar 有什么区别?

    char表示定长字符串,长度是固定的。 varchar表示可变长字符串,长度是可变的

    1.经常变化的字段用varchar
    2.知道固定长度的用char

  • 枚举类型:enum 二选一

  • 集合类型:set 类似枚举但是可以多选

  • 时间类型

    • date(日期) time(时间) datetime(日期和时间)
    • year (年)如果只输入两位 会以69为分割,小于69以20开头(2069),大于69会以19开头(1970)
参数选项
  • 主键 primary key
  • 自增 auto_increment
  • 注释 comment
  • 有唯一约束 unique

数据操作

-- 字段名可以省略不写,如果省略,后面的值必须与默认的字段一一对应,如果有字段名,则后面的值必须与写的字段一一对应
insert into 表名(字段【可写】) values(数据);
-- 如果不加条件会删除表内所有数据
delete 表名 where 条件
-- 修改数据
update 表名 set 修改的字段=修改的内容 where 条件
1、前导知识
1、MySQL通配符
  • _单一 一个任意字符
  • % 零到多个任意字符
select name from server where name like "web%";
//对于不确定的条件要使用  like 
2、同时查询两个及两个以上条件时使用 and 或 or
where id = 2 and name = "db_server2";
2、基础查询
-- 基础查询语句
slesct 字段 from 表名
-- 查询所有字段  
select * from 表名(公司中不允许使用,数据过多会导致负载升高)
3、条件查询
-- 使用where 后面加条件,多个条件使用and或者or连接
select * from 表 where id > 1 and name != '王麻子' and age = 18;

-- between,给定一个条件范围(包含开始和结束)
select * from 表 where id between 5 and 16;

-- in,给定一个集合
select * from 表 where id in (11,22,33)
-- not in ,取反
select * from 表 where id not in (11,22,33)
-- in用法的小嵌套,会将后面的查询结果(查出来的id)作为条件
select * from 表 where id in (select id from 表)
4、限制
-- 获取前 5 行
select * from 表 limit 5;

-- 从第 1 行开始, 取出 2 行, 包含第 1 行
select * from 表 limit 0,2;

-- 从第 1 行开始, 取出 2 行, 包含第 1 行
select * from 表 limit 2 offset 0;
5、排序

排序规则:不同字符集有不同的排序规则

-- 根据 “列” 从小到大排列(asc为默认,可不写)
select * from 表 order by 列 asc

-- 根据 “列” 从大到小排列
select * from 表 order by 列 desc

-- 根据 “列1” 从大到小排列,如果相同则按列2从小到大排序
select * from 表 order by 列1 desc,列2 asc
6、分组

分组后可以使用count(*) 查询数量

where必须在group by之前,后面如果还想加入条件,可以使用having

-- 一般来说,分组字段和前面的字段应统一
select age from 表 group by age
select age,id from 表 group by age,id

-- 如果不对应,则前面的查询字段必须含有聚合函数等
select age,id,count(*),sum(age),max(age),min(age) from 表 group by age,id

-- 特别的:group by 必须在where之后,order by之前
select age,id from 表  where id > 10 group by age,id order by id desc
select age from 表 group by age having max(id) > 10
7、嵌套查询
select * from  (select name from t1 where age>18 and age < 25 order by id desc limit 2 ) as tt  order by id;

8、多表联合

联合查询时:插入数据先插入主表的 删除数据先删除从表的

创建外键
foreign key(本表中与主表主键联系的字段) references 主表表名(主表主键) 
起别名
-- 可以用as的方式,也可以直接空格后面跟别名
select class.name as 班级,student.name 学员 from class,student where class.id=student.class_id;

select c.name as 班级, s.name 学员  
from class as c,student  s
where s.class_id = c.id and s.name='马邦德';
联合查询
-- 普通方法
select 表1.字段 表2.字段 from 表1,表2 where 表1.主键=表二.外键

-- inner join  只显示表1表2都有的数据
select  字段 from 表1 inner join 表2 on 表1.字段=表2.字段

-- left join   表1里有的数据都会表示,如果表2没有值则用null填充
select  字段 from 表1 left join 表2 on 表1.字段=表2.字段

-- right join   表2里有的数据都会表示,如果表1没有值则用null填充
select  字段 from 表1 right join 表2 on 表1.字段=表2.字段

用户操作

创建用户
-- 密码不可使用 符号# *
create user  ‘用户名’@‘客户端来源IP地址’ identified by ‘密码’   
删除用户
drop user ‘用户名’@‘客户端来源IP地址’ ;
修改用户名
rename user ‘用户名’ @‘客户端来源IP地址’ to ‘新用户名’ @‘客户端来源IP地址
更改密码
-- 第一种方法:
set password for '用户名'@'IP地址'=Password('新密码')

-- 第二种方法:
alter user '用户名'@'客户端来源IP地址' identified by '新密码';

-- 第三种方法(忘记密码时,必须使用此方法修改密码):
UPDATE mysql.user SET authentication_string=password('QFedu123!') WHERE user='root' and host='localhost';
-- 第四种方法(在shell中使用):
mysqladmin -u用户名 -p密码 password ‘新密码’
授权

以下方法只适用于mysql5.7

5.7可以不创建用户直接授权,8.0必须先创建用户

授权语句
-- 授权
grant 权限 on 数据库.表 to ’用户‘ @ ’客户端来源‘ identified by ‘密码’

-- 取消授权
revoke 权限 on 数据库.表 from ’用户‘ @ ’客户端来源‘ 
查看授权
show grants for ’用户‘@’客户端来源IP‘
等价于
select * from mysql.user where user='root'\G 

授权信息在mysql库中的,user,db,tables_priv 三个表中

  • user——》拥有所有库所有表的授权在这里查看
  • db——》拥有一个库所有表的授权在这里查看
  • tables_priv——》拥有一个库一个表的授权在这里查看

三个表,什么时候会有数据:

  • 不论拥有什么权限,user表里肯定会有信息(用户信息)
  • 如果是拥有**所有库中所有表**的权限,那只会在user表中有数据
  • 如果只有**某个库中所有表**的权限,那除了user表(里面不会展示出权限信息)以外,还会在db表中拥有权限信息
  • 如果只有**某个库中某个表**的权限,那除了user表(里面不会展示出权限信息)以外,还会在tables_priv表中拥有权限信息

来源IP

  • 可以是特定的某一个IP(10.9.29.95)
  • 可以是某个地址段(10.9.29.%)
  • 也可以是所有地址(%)
user 表中的字段
  • Host 来源地址

  • user 用户名

  • authentication_string 密码

  • password_expired 密码是否过期

  • plugin 插件 (加密插件)

    mysql8.0中默认的身份认证插件是caching_sha2_password,替代了之前的mysql_native_password

MySQL中含有的授权:

[官方权限文档][https://dev.mysql.com/doc/refman/5.7/en/privileges-provided.html]

all privileges  除grant外的所有权限
select          仅查权限
select,insert   查和插入权限
...
usage                   无访问权限
alter                   使用alter table
alter routine           使用alter procedure和drop procedure
create                  使用create table
create routine          使用create procedure
create temporary tables 使用create temporary tables
create user             使用create user、drop user、rename user和revoke  all privileges
create view             使用create view
delete                  使用delete
drop                    使用drop table
execute                 使用call和存储过程
file                    使用select into outfile 和 load data infile
grant option            使用grant 和 revoke
index                   使用index
insert                  使用insert
lock tables             使用lock table
process                 使用show full processlist
show databases          使用show databases
show view               使用show view
update                  使用update
reload                  使用flush
shutdown                使用mysqladmin shutdown(关闭MySQL)
super                   使用change master、kill、logs、purge、master和set global。还允许mysqladmin调试登陆
replication client      服务器位置的访问
replication slave       由复制从属使用

数据库备份

分类
-- 按时间分
   -- 指定时间段备份
   - mysqldump
   - xtrabackup
   -- 实时备份
   二进制文件
-------------------------------------   
-- 热备份
不停 MySQL 服务情况下,对数据进行备份
-- 冷备份
需要停止 MySQL 服务情况下,对数据进行备份

-------------------------------------
-- 逻辑备份
把目前数据库中存在的数据转换为SQL 语句,把这些语句保存在一个明文的文件中。
工具:mysqldump #热备份

-- 物理备份
直接对数据库中产生的数据文件,进行备份。备份的是文件或者文件夹。
工具或操作:
  - cp   # 冷备份
  - tar  # 冷备份
  - scp  # 冷备份
  - ghost # 冷备份
  - 硬盘 镜像 # 冷备份
  - LVM 的 LV 磁盘快照 
  - xtrabackup(掌握)  # 热备份
mysqldump 方式备份
使用场景和特点
  • 数据量小,100G以下
  • 恢复数据速度慢
  • mysql自带,不需要下载
备份
-- 基础语句
mysqldump  -h 服务器  -u用户名  -p密码   数据库名  > 备份文件.sql
-- 查看帮助
mysqldump --help

-- 备份所有数据库
mysqldump -u用户名 -p密码 --all-databases > `date +%FT%H_%M_%S`dump_all.sql
# 不包含 INFORMATION_SCHEMA,performance_schema,sys

-- 备份指定的多个库
shell> mysqldump -u用户名 -p密码 --databases db1 db2 db3 > `date +%FT%H_%M_%S`dump_all.sql

-- 备份指定库的多个表
mysqldump  -u用户名 -p密码 db1 t1 t3 t7 > dump.sql
恢复
mysql -uroot -p123456   < dump.sql
或者在mysql 中
source dump.sql

-- 如果备份的文件中不包括创库或者use语句(只备份了表的时候),则先需要创建数据库或者在回复时加上数据库名
例如:mysql db1 < dump.sql

xtrabackup 方式备份
使用场景和特点
  • 数据量大
  • 恢复数据速度快
下载安装
-- 保证有epel源

yum  install -y libev   mysql-community-libs-compat

-- 安装Percona存储库
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

-- 安装软件 -- 后面的24 表示支持5.7   80表示支持8.0
yum install percona-xtrabackup-24
配置文件
vim /etc/my.cnf

[xtrabackup]
target_dir = /backups/mysql/   # 备份数据放置的位置
socket = /tmp/mysql.sock  #如果是编译安装的mysql 则需要指定socket文件的路径
备份
1、全备
-- 备份
xtrabackup --backup --user=root --password='123'  --target-dir=/backups/full

-- 恢复
-- 先准备数据
xtrabackup --prepare --target-dir=/backups/ful
   -- 如果数据量大,可以加入内存来缩短准备时间
   xtrabackup --prepare --use-memory=512M --target-dir=/backups/full
-- 停止数据库
systemctl stop mysqld.service
-- 清理旧文件
rm -rf /var/lib/mysql/*
-- 还原备份
xtrabackup --copy-back --datadir=/var/lib/mysql --target-dir=/backups/full
-- 修改权限
chown mysql.mysql -R /var/lib/mysql
-- 启动数据库
systemctl restart mysqld.service
2、增量备份
-- 先创建一个全备份
xtrabackup --backup --user=root --password=123 --target-dir=/backups/bas

-- 在数据库中增加数据
-- 创建一个增量备份
xtrabackup --backup --user=root --password=123 --target-dir=/backups/inc1 --incremental-basedir=/backups/base
-- 再增加数据
xtrabackup --backup --user=root --password=123 --target-dir=/backups/inc2 --incremental-basedir=/backups/inc1


-- 恢复
-- 准备数据,先准备基础数据
xtrabackup --prepare --apply-log-only --target-dir=/backups/base
-- 准备第一次的增量备份数据
xtrabackup  --prepare  --apply-log-only  --target-dir=/backups/base  --incremental-dir=/backups/inc1
-- 准备第二次的增量备份数据
shell> xtrabackup --prepare   --target-dir=/backups/base  --incremental-dir=/backups/inc2
-- 停止数据库
systemctl stop mysqld.service
-- 清理旧文件
rm -rf /var/lib/mysql/*
-- 还原备份
xtrabackup --copy-back  --datadir=/var/lib/mysql  --target-dir=/backups/base/
-- 修改权限
chown mysql.mysql -R /var/lib/mysql
-- 启动数据库
systemctl restart mysqld.service

主从复制

binlog方式
1、主数据库
vim /etc/my.cnf

-- 在[mysqld]下添加
log-bin=mysql-bin
server-id=1

创建日志目录并赋予权限

mkdir /var/log/mysql
chown mysql.mysql /var/log/mysql
systemctl restart mysqld

登录数据库

GRANT REPLICATION SLAVE ON *.*  TO  '用户名'@'%'  identified by '密码';
flush privileges;

-- 查看用户是否创建成功  用户后面的host 必须为%(公司里面改为从的ip)
select user,host from mysql.user;  

-- 查看
show master status

2、从数据库
vim /etc/my.cnf

在[mysqld]下添加
server-id=2
systemctl restart mysqld

登录数据库

CHANGE MASTER TO
MASTER_HOST='主ip',
MASTER_USER='用户名',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=849;

-- 查看是否成功
show slave status\G
两个yes就ok


如果要重新配置,必须先stop slave

检查,在主库创建一个数据库,看从库是否也有

主从注意要点

1注意两端机器基础环境
2 注意主库不要随意重启服务
3 如果需要重新配置从库,请先stop slave; 再进行配置,配置完成后start slave;

查看
show slave status\G
yes I/O
yes I/O
主从成功

yes
no 失败 仔细看授权和配置IP及环境

配置完
1主 1从以后,再加一台机器,在配置一台从连接这个主
变成1主双从。

在主库建库 从库必须能看到。

git方式
1、主数据库
master操作:

vim /etc/my.cnf
-- 在[mysqld]下添加如下内容 
server-id=1   #定义server id master必写 
log-bin = mylog #开启binlog日志,master比写
gtid_mode = ON    #开启gtid
enforce_gtid_consistency=1   #强制gtid

-- 重启
systemctl restart mysqld   

-- 主服务器创建账户:
grant replication  slave,reload,super on *.*  to 'slave'@'%' identified by 'Qf@12345!';
-- 查看
-- 注:生产环境中密码采用高级别的密码,实际生产环境中将'%'换成slave的ip
select user,host from mysql.user; 

flush privileges;

注意:如果不成功删除以前的binlog日志
replication slave:拥有此权限可以查看从服务器,从主服务器读取二进制日志。
super权限:允许用户使用修改全局变量的SET语句以及CHANGE  MASTER语句
reload权限:必须拥有reload权限,才可以执行flush  [tables | logs | privileges]
2、从服务器
slave操作:
vim /etc/my.cnf  
-- 添加如下配置
server-id=2
gtid_mode = ON
enforce_gtid_consistency=1
master-info-repository=TABLE
relay-log-info-repository=TABLE
 
systemctl restart mysqld
-- 登陆mysql

change master to
master_host='master1',      #主ip 地址  最好用域名
master_user='授权用户',     #主服务上面创建的用户
master_password='授权密码', 
master_auto_position=1;

-- 启动slave角色
start slave;   
-- 查看状态
show slave status\G  
mysql主从,master宕机,如何进行切换?
主机故障或者宕机:

1)在salve执行:
mysql> stop slave;
mysql> reset master;
2)查看是否只读模式:show variables like 'read_only';
只读模式需要修改my.cnf文件,注释read-only=1并重启mysql服务。
或者不重启使用命令关闭只读,但下次重启后失效:set global read_only=off;
3)查看show slave status \G;
4)在程序中将原来主库IP地址改为现在的从库IP地址,测试应用连接是否正常
主从复制原理

实现整个主从复制,需要由slave服务器上的IO进程和Sql进程共同完成。
要实现主从复制,首先必须打开Master端的binary log(bin-log)功能,因为整个MySQL 复制过程实际上就是Slave从Master端获取相应的二进制日志,然后再在自己slave端完全顺序的执行日志中所记录的各种操作。

主从复制过程

master 负责写 -----A
slave relay-log -----B
I/o 负责通信读取binlog日志
SQL 负责写数据

  1. master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
  2. slave将master的binary log events拷贝到它的中继日志(relay log);
  3. slave重做中继日志中的事件,
  4. 将改变反映它自己的数据。
主从复制延迟大比较慢原因

主服务器配置高,从服务器的配置低。并发量大导致主服务器读的慢。从服务器写的慢

网络延迟比较高,从服务器的读写速度慢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值