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 aaa@qq.com: woHtkMgau9,w
woHtkMgau9,w 就是密码
**密码
如果上面的命令无法找到密码,可以进行下列操作免密登录 修改完毕后记得注释或删除修改
vim /etc/my.cnf
必须在[mysqld]下面加入
skip-grant-tables
修改密码
进入数据库后进行操作
use mysql;
update user set authentication_string=password('aaa@qq.com') where user='root';
flush privileges;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'aaa@qq.com';
方法二
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 'aaa@qq.com'
12、添加环境变量
vim /etc/profile ---添加如下
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
source /etc/profile
之后就可以在任何地方使用mysql命令登陆Mysql服务器:
mysql -uroot -p'aaa@qq.com'
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 'aaa@qq.com!';
-- 查看
-- 注:生产环境中密码采用高级别的密码,实际生产环境中将'%'换成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 负责写数据
- master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
- slave将master的binary log events拷贝到它的中继日志(relay log);
- slave重做中继日志中的事件,
- 将改变反映它自己的数据。
主从复制延迟大比较慢原因
主服务器配置高,从服务器的配置低。并发量大导致主服务器读的慢。从服务器写的慢
网络延迟比较高,从服务器的读写速度慢
上一篇: python中list常用的方法
下一篇: 爬虫(七):BeatifulSoup模块
推荐阅读