一、主从
1、备份的三种类型
- 热备份
- 逻辑备份
- 物理备份
二、集群
1、概述
高可用集群(HA)是指通过特殊软件,把独立的服务器连接起来,组成一个能够提供故障间切换功能的集群。
2、标准
可用性级别 | 年宕机时间 | 描述 |
99% | 3.65天 | 基本可用系统 |
99.9% | 8.76小时 | 可用系统 |
99.99% | 52.6分钟 | 高可用系统 |
99.999% | 5.3分钟 | 抗故障系统 |
99.9999% | 32秒 | 容错系统 |
3、原理
replication可以实现将数据从一台数据库服务器(master)复制到多台数据库服务器。
4、描述
- slave端的io线程发送请求给master端的binlog dump线程。
- master端的binlog dump线程获取二进制日志信息(文件名和位置信息)发送给slave端的io线程。
- slave端的io线程获取到内容,依次写到slave端relaylog(中继日志)并把master端的binlog文件名和位置记录到master。info里头。
- slave端的sql线程检测到relaylog中的内容更新,就会解析relaylog中的更新内容,并执行这些操作,从而达到和master端数据一致
5、主从复制架构体系
(1)双机热备 主从复制
默认情况下master接受读写,从服务器只接受读。
(2)级联复制
可以分担读的压力
中间服务器出现故障,就瘫痪了
(3)并联复制 ⼀主多从
解决单点故障
承担更多的读的压⼒
从服务器都从主服务器读取数据,master服务器压⼒⼤
(4)双主复制
看起来可以同时接收读写,实际运作中只有⼀台服务器在⼯作,另外⼀台只接受读
6、编写脚本安装mysql服务
(1)主服务器
vim mysql.sh
#!/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
(2)从服务器
[root@cong ~]# vim mysql.sh
#!/bin/bash
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.33-linux-glibc2.12-x86_64.tar
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
7、编写配置文件
(1)主服务器
[root@zhu ~]# vim /usr/local/mysql/my.cnf
[mysqld]
basedir=/usr/local/mysql/
datadir=/usr/local/mysql/data/
socket=/tmp/mysql.sock
port=3306
log-error=/usr/local/mysql/data/db01-master.err
log-bin=/usr/local/mysql/data/binlog
server-id=10
character-set-server=utf8mb4
[root@zhu ~]# chkconfig --add mysql8
[root@zhu ~]# chkconfig mysql8 on
[root@zhu ~]# chkconfig --list
(2)从服务器
[root@zhu ~]# vim /usr/local/mysql/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
port=3310
log-error=/usr/local/mysql/data/db01-slave.err
relay-log=/usr/local/mysql/data/relaylog
server-id=11
character_set_server=utf8mb4
8、重启服务、开机自启
[root@mysql001 ~]# service mysql8 restart
[root@mysql001 ~]# chkconfig --add mysql8
[root@mysql001 ~]# chkconfig mysql8 on
[root@mysql001 ~]# chkconfig
三、主从复制之数据同步
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
2、master和slave都安装rsync
yum -y install rsync
3、同步master中的data到slave对应位置
rsync -av /usr/local/mysql/data root@10.1.1.110:/usr/local/mysql/
4、启动主服务器和从服务器
[root@mysql001 ~]# service mysql8 start
[root@slave ~]# service mysql8 start
[root@mysql001 ~]#/usr/local/mysql/bin/mysql -P3310 -pZhang_Min_666
四、主从复制的实现
1、master创建授权账号
mysql> create user 'slave'@'10.1.1.%'
identified by 'slave_123';
Query OK, 0 rows affected (0.02 sec)
mysql> grant replication slave on *.* to
'slave'@'10.1.1.%';
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
2、在master中锁表,然后查看⼆进制⽂件和位置
mysql> flush tables with read lock;
3、在从服务器中,使⽤change master to 指定主服务器,并实现数据同步。
[root@slave ~]# /usr/local/mysql/bin/mysql -p3310 -pZhang_Min_666
change master to master_host='10.1.1.100',
master_user='slave',
master_password='slave_123', master_port=3306,
master_log_file='binlog.000004',
master_log_pos=1092;
4、启动slave数据同步,查看状态
mysql> start slave;
mysql> show slave status\G
5、解锁文件
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
五、ssl⾮对称加密
1、获得远程master主机的公钥
mysql -uzhangmin -pabc_123 -h 192.168.71.166 -
P3306 --get-server-public-key
quit
2、登录slave服务器本地的数据库
mysql -pZhang_Min_666 -P3310
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