一、备份的三种类型
备份的三种主要类型包括热备份、逻辑备份和物理备份,每种备份类型都有其特定的应用场景和优缺点。
1. 热备份
定义:
热备份是在数据库或系统处于正常运行状态下进行的备份。这种备份方式允许在不停机的情况下对数据库或系统数据进行保护,减少了备份操作对业务连续性的影响。
特点:
- 在线性:在数据库或系统正常运行时进行,无需停机。
- 数据一致性:需要确保在备份过程中数据的一致性,通常通过数据库的事务日志或日志链来实现。
- 资源占用:可能会占用较多的系统资源,如CPU、内存和I/O资源。
- 恢复能力:在发生故障时,可以利用热备份快速恢复数据,减少业务中断时间。
适用场景:
- 需要高可用性和业务连续性的场景。
- 数据库或系统无法承受长时间停机进行备份的情况。
2. 逻辑备份
定义:
逻辑备份是通过导出数据库的逻辑结构和数据内容来进行备份的方法。它通常涉及对数据库中的表、视图、存储过程等逻辑对象进行备份。
特点:
- 数据独立性:逻辑备份与数据库的物理存储结构无关,可以在不同的数据库管理系统之间进行迁移。
- 灵活性:可以选择性地备份和恢复特定的逻辑对象,如单个表或视图。
- 可读性:备份文件通常是文本格式,易于查看和编辑。
- 备份和恢复时间:备份和恢复过程可能相对较慢,因为需要遍历数据库的逻辑结构并生成或重建逻辑对象。
适用场景:
- 需要进行数据库迁移或版本升级的场景。
- 需要对部分数据进行备份和恢复的场景。
3. 物理备份
定义:
物理备份是直接复制数据库的物理文件(如数据文件、日志文件等)来进行备份的方法。它保留了数据库的物理存储结构和数据内容。
特点:
- 高效性:备份和恢复过程通常较快,因为直接操作物理文件。
- 数据一致性:物理备份可以确保备份文件与原始数据库之间的高度一致性。
- 空间占用:可能占用较多的存储空间,特别是进行完整备份时。
- 恢复能力:在发生故障时,可以利用物理备份快速恢复整个数据库或特定的数据文件。
适用场景:
- 需要快速恢复整个数据库的场景。
- 数据库规模较大,且对备份和恢复时间有较高要求的场景。
综上所述,热备份、逻辑备份和物理备份各有其特点和适用场景。在实际应用中,可以根据具体需求和业务连续性要求选择合适的备份类型或组合使用多种备份类型来确保数据的安全性和可恢复性。
二、情景
1、⼊职企业,发现企业架构为⼀主多从,但是两台从服务器和主库不同
步,但是每天会全库北⽅主服务器上的数据到从服务器,由于数据量
不是很⼤,所以没有⼈处理主从不同步的问题
2、技术
熟悉
mysql
数据库常⻅主从架构
理解
mysql
主从架构实现原理
掌握
mysql
主从架构的搭建
3、业务场景
企业对数据安全性越来越重视,由于常规备份不能实时记录
数据库的所有状态,为了能够保障数据库实时备份冗余,希
望将现有的单机数据库变成双机热备
4、目标
了解什么
mysql
的
replication
理解
mysql
的
replication
的架构原理
掌握
mysql
基本复制架构
m-s
了解和掌握基于
GTID
复制特点以及搭建
三、集群概述
1.
集群主要类型
1.
⾼可⽤集群
High Avaible Cluster HA cluster
2.
⾼可⽤集群是指通过特殊软件,把独⽴的服务器连接起来,
组成⼀个能够提供故障切换(
Fail Over
)功能的集群
2.
⾼可⽤标准
3.
常⽤的集群架构
1. mysql replication
2. mysql cluster
3. mysql group replication MGR
4. Maradb Galera CLuster
5. MHA|keepalived|HeatBeat|Lvs
,
Haproxy
等技术构建⾼可⽤
集群
4.
复制原理
1. replication,
可以实现将数据从⼀台数据库服务器(
mster
)复制
到多台数据库服务器
slave
2.
默认情况下,
replication
属于异步复制,所以⽆需⻓连接
3.
⼯作原理
1. master
主服务器
2. slave
从服务器
3.
描述
1. slave
端的
io
线程发送请求给
master
端的
binlog dump
线
程
2. master
端的
binlog dump
线程获取⼆进制⽇志信息(⽂
件名和位置信息)发送给
slave
端的
io
线程
3. slave
端的
io
线程获取到内容,依次写到
slave
端
relay log
(中继⽇志)并把
master
端的
binlog
⽂件名和位置记录
到
master
。
info
⾥头,
4. slave
端的
sql
线程检测到
relaylog
中的内容更新,就会解
析
relaylog
中的更新内容,并执⾏这些操作,从⽽达到和
master
端数据⼀致
4.
复制架构体系
复制架构体系
1.
解决单点故障
2.
承担更多的读的压⼒
3.
从服务器都从主服务器读取数据,
master
服务器压⼒⼤
1.
看起来可以同时接收读写,实际运作中只有⼀台服务器在⼯
作,另外⼀台只接受读
5. 1.
安装前的环境准备
安装前的环境准备
1.
普通的
ab
复制,最基本的架构
M-S
2.
两者数据库的的版本必须⼀致
4.
前期准备,克隆机器,设置
ip
,修改主机名称,关闭
NEtworkManager
,防⽕墙
selinux
,配置
yum
源,配置时间同步
时间同步是⾮常重要的设置
ntpdate cn.ntp.org.cn
主从复制核⼼思路
1.
思路
1. slave
和
master
必须安装相同的
msyql
版本
# master
服务器中添加
sed
-i
'$a192.168.137.80
master.msyql.yuanyu.zhangmin'
/etc/hosts
# slave
服务器中添加
sed
-i
'$a192.168.137.90
slave.msyql.yuanyu.zhangmin'
/etc/hosts
ntpdate cn.ntp.org.cn
2. master
开启⼆进制⽇志,
slave
必须开始
relay
⽇志
3. mster
端和
slava
端的
server-id
不能⼀致
4. se
1. master
必须创建⼀个复制⽤户
2.
保持
master
和
slave
端初始数据⼀致
3. slave
端配置主从复制
2.
思路
1.
思路
主从复制之
master
配置
1.
编写
mysql
安装脚本
##
1.
上传
mysql
安装包到
mstaer
和
slave
2.
编写脚本
#!/bin/bash
yum list installed |grep libaio
if
[
$?
ne
0
];
then
yum
-y
install libaio
fi
echo
libaio
yes
rm
-rf
/etc/my.cnf
echo
remo my.cnf
yes
tar
-xf
mysql-8.0.33-linux-glibc2.12-
x86_64.tar.xz
echo
tar zx
yes
cp
-r
~/mysql-8.0.33-linux-glibc2.12-x86_64
/usr/local/mysql
echo
copy file to /usr/local/mysql
yes
mkdir
/usr/local/mysql/mysql-files
echo
mysql-files
yes
grep
mysql /etc/passwd
useradd
-r -s
/sbin/nologin mysql
chown
mysql:mysql /usr/local/mysql/mysql-files
chmod
750
/usr/local/mysql/mysql-files
/usr/local/mysql/bin/mysqld
--initialize --
user
=mysql
--basedir
=/usr/local/mysql/
/usr/local/mysql/bin/mysql_ssl_rsa_setup
--
datadir
=/usr/local/mysql/data
cp
/usr/local/mysql/support-files/mysql.server
/etc/init.d/mysql8
sed
-i
'$aexport
PATH=/usr/local/mysql/bin:$PATH'
/etc/profile
source
/etc/profile
3.
编写配置⽂件
vim
/usr/local/mysql/my.cnf
4.
重启服务
5.
设置开机启动
[root@mysql001 ~]# chkconfig --add
mysql8
[root@mysql001 ~]# chkconfig mysql8 on
[root@mysql001 ~]# chkconfig
注:该输出结果只显示
SysV
服务,并不包含
原⽣
systemd
服务。
SysV
配置数据
可能被原⽣
systemd
配置覆盖。
要列出
systemd
服务,请执⾏
'systemctl list-unit-files'
。
查看在具体
target
启⽤的服务请执⾏
'systemctl list-dependencies
[target]'
。
mysql8 0:
关
1:
关
2:
开
3:
开
4:
开
5:
开
6:
关
主从复制之
slave
从服务器软件的安装
1.
不需要初始化
2.
查看⽂件
3.
脚本
netconsole 0:
关
1:
关
2:
关
3:
关
4:
关
5:
关
6:
关
network 0:
关
1:
关
2:
开
3:
开
4:
开
5:
开
6:
关
相对于主服务器的安装与配置,从服务器不需要初始化,他的数
据都来⾃于主服务器,其他都⼀样
[root@slave ~]
# ls
anaconda-ks.cfg mysql-8.0.33-linux-glibc2.12-
x86_64.tar.xz
initserver.sh mysql.sh
vim mysql.sh
#!/bin/bash
4.
配置⽂件
主从复制之数据同步
1. master
服务器同步到
slave
服务器
1.
停⽤
master
服务器
msyql
服务
service
mysql8
stop
2. master
删除
/usr/local/mysql/data/auto.cnf
每安装⼀个
mysql
软件,
data
数据⽬录都会产⽣⼀个
auto.cnf
⽂件,⾥⾯
是⼀个唯⼀性编号,相当于每个⼈的身份证编号
[root@mysql001 ~]
# ls
/usr/local/mysql/data/auto.cnf
/usr/local/mysql/data/auto.cnf
[root@mysql001 ~]
# cat
/usr/local/mysql/data/auto.cnf
[auto]
server-uuid
=f6421989-5330-11ef-974f-
000c29ce78bb
[root@mysql001 ~]
# rm -rf
/usr/local/mysql/data/auto.cnf
3. master
和
slave
都安装
rsync
yum
-y
install rsync
4.
同步
master
中的
data
到
slave
对应位置
rsync
-av
/usr/local/mysql/data
root@10.1.1.110:/usr/local/mysql/
5.
启动主服务器和从服务器
[root@mysql001 ~]# service mysql8 start
Starting MySQL.. SUCCESS!
[root@slave ~]# service mysql8 start
Starting MySQL.Logging to
'/usr/local/mysql/data/db01-slave.err'.
. SUCCESS!
6.
登录从服务器
[root@mysql001 ~]
#
/usr/local/mysql/bin/mysql -P3310 -
pZhang_Min_666
mysql: [Warning] Using a password on the
command line interface can be insecure.
Welcome to the MySQL monitor. Commands end
with ; or \g.
Your MySQL connection id is
8
Server version:
8
.0.33 MySQL Community
Server
-
GPL
Copyright (c)
2000
,
2023
, Oracle and/or its
affiliates.
⽆法启动的⼏种情况
1. /etc/init.d/mysql8
不存在,可能没有复制
2. mysql
没有安装在
/usr/local/mysql
3. my.cnf
导致⽆法启动,格式
1.
安装路径
2.
数据⽬录
3.
套接字
4.
错误⽇志到底放在
data
⾥头
5. mysql
账户⽆法写⼊
/usr/local/mysql/
6.
将错误⽇志放在
data
就没有权限⽂件
7.
直接修改
/usr/local/mysql
的权限
Oracle is a registered trademark of Oracle
Corporation and/or its
affiliates. Other names may be trademarks of
their respective
owners.
Type
'help;'
or
'\h'
for
help. Type
'\c'
to
clear
the current input statement.
主从复制的实现
1. master
创建授权账号
2.
在
master
中锁表,然后查看⼆进制⽂件和位置
3.
在从服务器中,使⽤
change master to
指定主服务器,并实现数
据同步
[
root
@slave
~
]
# /usr/local/mysql/bin/mysql -
P3310 -pZhang_Min_666
mysql:
[
Warning
]
Using
a
password on
the
command line interface can be insecure.
Welcome
to
the MySQL monitor. Commands
end
with
;
or
\g
.
Your MySQL
connection
id
is
8
Server
version:
8.0.33
MySQL Community
Server
-
GPL
Copyright
(
c
)
2000
,
2023
, Oracle
and
/or its
affiliates.
Oracle
is
a registered trademark of Oracle
Corporation
and
/or its
affiliates. Other names may be trademarks of
their respective
owners.
Type
'help;'
or
'\h'
for help
. Type
'\c'
to
clear
the
current
input statement.
4.
启动
slave
数据同步,查看状态
mysql>
start slave
;
mysql>
show slave status
\G
5.
常⻅⽂件
1. change-master-to
写错
6.
解锁⽂件
8.0
需要
ssl
⾮对称加密
1.
获得远程
master
主机的公钥
mysql -uzhangmin -pabc_123 -h 192.168.71.166 -
P3306 --get-server-public-key
quit
2.
登录
slave
服务器本地的数据库
stop slave
reset slave
change master to ...
mysql>
unlock tables
;
Query
OK,
0
rows affected
(
0.00
sec
)
3.
停⽤
slave
服务,重新设置
slave
服务
mysql> stop slave;
mysql> reset slave;
mysql> change master to
master_host='192.168.71.166',
master_user='zhangmin',
master_password='abc_123', master_port=3306,
master_log_file='binlog.000006',master_log_pos=
866;
4.
启动
slave
服务
mysql> start slave
mysql> show slave status\G