MYSQL备份还原工具、主从复制、高可用

1、使用mysqldump备份数据库并通过备份及二进制日志还原数据(备份完后再写入数据,然后再删库)

环境 InnoDB备份

  1. 确定使用的字符集后做完全备份,若有二进制数据建议加上–hex-blob
[root@centos7 ~]#mysql -e "status"
--------------
mysql  Ver 15.1 Distrib 5.5.60-MariaDB, for Linux (x86_64) using readline 5.1

Connection id:          4
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server:                 MariaDB
Server version:         5.5.60-MariaDB MariaDB Server
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
UNIX socket:            /var/lib/mysql/mysql.sock
Uptime:                 19 min 24 sec

Threads: 1  Questions: 115  Slow queries: 0  Opens: 8  Flush tables: 2  Open tables: 27  Queries per second avg: 0.098
--------------

[root@centos7 ~]#mysqldump -A -F --single-transaction --master-data=2 --default-character=utf8mb4 > /data/backup/all_bak_`date +%F`.sql
  1. 完全备份完成后,在表中添加记录,后添加的记录应该记录在二进制日志中
MariaDB [hellodb]> select * from teachers;
+-----+---------------+-----+--------+
| TID | Name          | Age | Gender |
+-----+---------------+-----+--------+
|   1 | Song Jiang    |  45 | M      |
|   2 | Zhang Sanfeng |  94 | M      |
|   3 | Miejue Shitai |  77 | F      |
|   4 | Lin Chaoying  |  93 | F      |
+-----+---------------+-----+--------+
4 rows in set (0.01 sec)

MariaDB [hellodb]> show master logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |     26792 |
| mysql-bin.000002 |    921736 |
| mysql-bin.000003 |      7270 |
| mysql-bin.000004 |       245 |
+------------------+-----------+
4 rows in set (0.00 sec)

MariaDB [hellodb]> insert teachers(name)value('g');
Query OK, 1 row affected, 1 warning (0.00 sec)

MariaDB [hellodb]> insert teachers(name)value('h');
Query OK, 1 row affected, 1 warning (0.01 sec)

MariaDB [hellodb]> show master logs;               
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |     26792 |
| mysql-bin.000002 |    921736 |
| mysql-bin.000003 |      7270 |
| mysql-bin.000004 |       627 |
+------------------+-----------+
4 rows in set (0.00 sec)

MariaDB [hellodb]> select * from teachers;         
+-----+---------------+-----+--------+
| TID | Name          | Age | Gender |
+-----+---------------+-----+--------+
|   1 | Song Jiang    |  45 | M      |
|   2 | Zhang Sanfeng |  94 | M      |
|   3 | Miejue Shitai |  77 | F      |
|   4 | Lin Chaoying  |  93 | F      |
|   5 | g             |   0 | NULL   |
|   6 | h             |   0 | NULL   |
+-----+---------------+-----+--------+
6 rows in set (0.01 sec)
  1. 删库重启服务
[root@centos7 mysql]#rm -rf /var/lib/mysql/*
[root@centos7 mysql]#systemctl restart mariadb
  1. 恢复前先临时禁用二进制日志记录,禁止用户访问,再恢复数据库
MariaDB [(none)]> set sql_log_bin=off;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> show variables like 'sql_log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sql_log_bin   | OFF   |
+---------------+-------+
1 row in set (0.00 sec)

MariaDB [hellodb]> source /data/backup/all_bak_2019-08-11.sql

MariaDB [test]> use hellodb
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [hellodb]> select * from teachers;
+-----+---------------+-----+--------+
| TID | Name          | Age | Gender |
+-----+---------------+-----+--------+
|   1 | Song Jiang    |  45 | M      |
|   2 | Zhang Sanfeng |  94 | M      |
|   3 | Miejue Shitai |  77 | F      |
|   4 | Lin Chaoying  |  93 | F      |
+-----+---------------+-----+--------+
4 rows in set (0.00 sec)
  1. 还原二进制日志
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=245;

[root@centos7 ~]#ll /data/logbin/
total 1884
-rw-rw---- 1 mysql mysql  26792 Aug 11 20:56 mysql-bin.000001
-rw-rw---- 1 mysql mysql 921736 Aug 11 20:56 mysql-bin.000002
-rw-rw---- 1 mysql mysql   7270 Aug 11 21:21 mysql-bin.000003
-rw-rw---- 1 mysql mysql    646 Aug 11 21:29 mysql-bin.000004
-rw-rw---- 1 mysql mysql  26792 Aug 11 21:29 mysql-bin.000005
-rw-rw---- 1 mysql mysql 921736 Aug 11 21:29 mysql-bin.000006
-rw-rw---- 1 mysql mysql    245 Aug 11 21:29 mysql-bin.000007
-rw-rw---- 1 mysql mysql    210 Aug 11 21:29 mysql-bin.index

[root@centos7 logbin]#mysqlbinlog /data/logbin/mysql-bin.00000{4,5,6,7} > incr.sql

还原二进制文件前找到导致数据库错误的注释掉
MariaDB [mysql]> source /data/logbin/incr.sql

MariaDB [hellodb]> select * from teachers;         
+-----+---------------+-----+--------+
| TID | Name          | Age | Gender |
+-----+---------------+-----+--------+
|   1 | Song Jiang    |  45 | M      |
|   2 | Zhang Sanfeng |  94 | M      |
|   3 | Miejue Shitai |  77 | F      |
|   4 | Lin Chaoying  |  93 | F      |
|   5 | g             |   0 | NULL   |
|   6 | h             |   0 | NULL   |
+-----+---------------+-----+--------+
6 rows in set (0.01 sec)

MariaDB [(none)]> set sql_log_bin=on;
Query OK, 0 rows affected (0.01 sec)

2、使用xtrabackup备份数据并还原

还原时的机器数据库目录为空且服务未启动
MYSQL备份还原工具、主从复制、高可用_第1张图片



MYSQL备份还原工具、主从复制、高可用_第2张图片
重启服务完成

还原注意事项:
1.datadir 目录必须为空。除非指定innobackupex --force-non-empty-directorires选项指定,否则–copy-backup选项不会覆盖
2.在restore之前,必须shutdown MySQL实例,不能将一个运行中的实例restore到datadir目录中
3.由于文件属性会被保留,大部分情况下需要在启动实例之前将文件的属主改为mysql,这些文件将属于创建备份的用户
chown -R mysql:mysql /data/mysql
以上需要在用户调用innobackupex之前完成

3、MySQL数据备份企业实战(shell或python脚本实现)

使用xtrabackup以每周为一个备份周期做备份(数据库+二进制日志,备份至本地/data/backup)
提示: 周一某个时间点做一次完全备份,周二、三、四、五、六、日增量
备份存储目录"/data/backup/2018/52/1/备份数据" 目录解释"/data/backup/年/本年度的第几周/本周的第几天/数据" 一年52周一周7天
(Andy老师提供python备份脚本参考)

#!/bin/bash
for i in `seq 0 6`;do #循环6次
a=/data/backup/`date +%Y`/`date +%U`/ #存储目录变量
mkdir -p $a$i # #创建目录
t=`date +%w` #定义星期
if [ "$t" == "1" ];then #匹配星期 周一为完全备份
        xtrabackup --backup --target-dir=/data/backup &> /dev/null &&  echo backup ok
else
        if [ "$t" == "2" ];then  #匹配星期 周二为增量备份
                xtrabackup --backup --target-dir="$a"1 --incremental-basedir=/data/backup &> /dev/null &&  echo backup ok
        elif [ "$t" == "3" ];then
                xtrabackup --backup --target-dir="$a"2 --incremental-basedir="$a"1 &> /dev/null &&  echo backup ok
        elif [ "$t" == "4" ];then
                xtrabackup --backup --target-dir="$a"3 --incremental-basedir="$a"2 &> /dev/null &&  echo backup ok
        elif [ "$t" == "5" ];then
                xtrabackup --backup --target-dir="$a"4 --incremental-basedir="$a"3 &> /dev/null &&  echo backup ok
        elif [ "$t" == "6" ];then
                xtrabackup --backup --target-dir="$a"5 --incremental-basedir="$a"4 &> /dev/null &&  echo backup ok
        elif [ "$t" == "0" ];then
                xtrabackup --backup --target-dir="$a"6 --incremental-basedir="$a"5 &> /dev/null &&  echo backup ok
        fi
fi
done

[root@centos7 ~]# crontab -l
0 2 * * * root /root/b.sh
写入计划任务。每晚执行一遍备份。周一则完全备份

4、描述MySQL复制工作原理并实现主从,主主,主从级联及半同步复制

MYSQL备份还原工具、主从复制、高可用_第3张图片
当主服务器收到数据更新请求,会写入二进制日志中。在本机中,有一个专门的dump的主服务器线程将二进制日志出来往从服务器线程发。然后发给从服务器。从服务器有一个io thread线程然后写到relay log (类似二进制日志)日志中 。在交给sql thread 在从服务器中更改数据

主从
从服务器设置
MYSQL备份还原工具、主从复制、高可用_第4张图片
MYSQL备份还原工具、主从复制、高可用_第5张图片
清空主服务器的二进制日志后重启

设置从服务器复制数据库账号
MYSQL备份还原工具、主从复制、高可用_第6张图片
主服务器导入数据

MYSQL备份还原工具、主从复制、高可用_第7张图片
从服务器重启数据库服务,添加主信息以及复制用的账号密码


MYSQL备份还原工具、主从复制、高可用_第8张图片

MYSQL备份还原工具、主从复制、高可用_第9张图片
MYSQL备份还原工具、主从复制、高可用_第10张图片
从服务器复制完且已经应用

MYSQL备份还原工具、主从复制、高可用_第11张图片
MYSQL备份还原工具、主从复制、高可用_第12张图片
主从级联
主服务器配置
MYSQL备份还原工具、主从复制、高可用_第13张图片
删库清除二进制日志后重启服务

设置复制帐号

中间从服务器配置
MYSQL备份还原工具、主从复制、高可用_第14张图片
删库清除二进制后重启

设置主,账号密码
MYSQL备份还原工具、主从复制、高可用_第15张图片

末端从服务器配置
MYSQL备份还原工具、主从复制、高可用_第16张图片
删库清二进制重启

设置关系,主为中间从服务器
MYSQL备份还原工具、主从复制、高可用_第17张图片

主主 两边同时更改删除一项会报错,生产中不会同时有2个主
删库清二进制,设置互为主从,自动增长id
MYSQL备份还原工具、主从复制、高可用_第18张图片

建立复制账号

设置关系
MYSQL备份还原工具、主从复制、高可用_第19张图片

MYSQL备份还原工具、主从复制、高可用_第20张图片

MYSQL备份还原工具、主从复制、高可用_第21张图片

半同步复制
删库清二进制
MYSQL备份还原工具、主从复制、高可用_第22张图片
MYSQL备份还原工具、主从复制、高可用_第23张图片
MYSQL备份还原工具、主从复制、高可用_第24张图片

主.17 设置复制账号

从.27 .37 设置关系


主导入数据库同步到从

实现半同步
MYSQL备份还原工具、主从复制、高可用_第25张图片


MYSQL备份还原工具、主从复制、高可用_第26张图片
MYSQL备份还原工具、主从复制、高可用_第27张图片

MYSQL备份还原工具、主从复制、高可用_第28张图片
可以更改超时时长,默认10000毫秒太长了,最好改成1000毫秒
MYSQL备份还原工具、主从复制、高可用_第29张图片
MYSQL备份还原工具、主从复制、高可用_第30张图片
所有从节点设置

MYSQL备份还原工具、主从复制、高可用_第31张图片
MYSQL备份还原工具、主从复制、高可用_第32张图片

MYSQL备份还原工具、主从复制、高可用_第33张图片
MYSQL备份还原工具、主从复制、高可用_第34张图片
MYSQL备份还原工具、主从复制、高可用_第35张图片
主节点查看
MYSQL备份还原工具、主从复制、高可用_第36张图片
所有从节点启动从同步
MYSQL备份还原工具、主从复制、高可用_第37张图片
ps 超时时长可在配置文件中设置

MYSQL备份还原工具、主从复制、高可用_第38张图片

5、描述MySQL Proxy原理并实现读写分离

MySQL Proxy处于客户端应用程序和MySQL服务器之间,通过截断、改变并转发客户端和后端数据库之间的通信来实现其功能,这和WinGate 之类的网络代理服务器的基本思想是一样的。代理服务器是和TCP/IP协议打交道,而要理解MySQL Proxy的工作机制,同样要清楚MySQL客户端和服务器之间的通信协议,MySQL Protocol 包括认证和查询两个基本过程

认证过程包括:
客户端向服务器发起连接请求
服务器向客户端发送握手信息
客户端向服务器发送认证请求
服务器向客户端发送认证结果

如果认证通过,则进入查询过程:
客户端向服务器发起查询请求
服务器向客户端返回查询结果

当然,这只是一个粗略的描述,每个过程中发送的包都是有固定格式的,想详细了解MySQL Protocol的同学,可以去这里 看看。MySQL Proxy要做的,就是介入协议的各个过程。首先MySQL Proxy以服务器的身份接受客户端请求,根据配置对这些请求进行分析处理,然后以客户端的身份转发给相应的后端数据库服务器,再接受服务器的信息,返回给客户端。所以MySQL Proxy需要同时实现客户端和服务器的协议。由于要对客户端发送过来的SQL语句进行分析,还需要包含一个SQL解析器。可以说MySQL Proxy相当于一个轻量级的MySQL了,实际上,MySQL Proxy的admin server是可以接受SQL来查询状态信息的

mysql主从搭好
从服务器配置文件必须要有read only
MYSQL备份还原工具、主从复制、高可用_第39张图片
MYSQL备份还原工具、主从复制、高可用_第40张图片

MYSQL备份还原工具、主从复制、高可用_第41张图片

MYSQL备份还原工具、主从复制、高可用_第42张图片
MYSQL备份还原工具、主从复制、高可用_第43张图片

MYSQL备份还原工具、主从复制、高可用_第44张图片

主服务器上


proxysql上
MYSQL备份还原工具、主从复制、高可用_第45张图片
MYSQL备份还原工具、主从复制、高可用_第46张图片
MYSQL备份还原工具、主从复制、高可用_第47张图片
MYSQL备份还原工具、主从复制、高可用_第48张图片
主服务器设置后自动同步到从服务器

proxymysql
MYSQL备份还原工具、主从复制、高可用_第49张图片
MYSQL备份还原工具、主从复制、高可用_第50张图片
MYSQL备份还原工具、主从复制、高可用_第51张图片
MYSQL备份还原工具、主从复制、高可用_第52张图片
6032端口设置实现读写分离

MYSQL备份还原工具、主从复制、高可用_第53张图片
MYSQL备份还原工具、主从复制、高可用_第54张图片
MYSQL备份还原工具、主从复制、高可用_第55张图片
MYSQL备份还原工具、主从复制、高可用_第56张图片

6、使用MHA及galera实现MySQL的高可用性

MHA

管理主机、主从机时间一直,selinux 防火墙 关闭

主服务器配置
MYSQL备份还原工具、主从复制、高可用_第57张图片
未设置好同步前保持数据库干净

从服务器配置 不清理中继日志,开启二进制日志
MYSQL备份还原工具、主从复制、高可用_第58张图片
所有主从都加上 跳过名字解析
MYSQL备份还原工具、主从复制、高可用_第59张图片
主服务器建立从服务器复制帐号

从服务器设置主服务器


主服务器导入数据库

主服务器上建立MHA管理用户

MYSQL备份还原工具、主从复制、高可用_第60张图片
四台机器相互之间key验证
MYSQL备份还原工具、主从复制、高可用_第61张图片
MYSQL备份还原工具、主从复制、高可用_第62张图片
MYSQL备份还原工具、主从复制、高可用_第63张图片
在管理节点上安装两个包
MYSQL备份还原工具、主从复制、高可用_第64张图片
在被管理节点安装
MYSQL备份还原工具、主从复制、高可用_第65张图片
MHA管理服务器上配置


检查



启动 前台执行,一次性任务 生产中后台运行

galera 生产中不建议使用,有数据冲突时少数服从多数,踢掉少数的服务器

都至少需要三个节点,不能安装mariadb-server,安装专门的软件
所有主机都安装相同的软件

修改配置文件
MYSQL备份还原工具、主从复制、高可用_第66张图片
MYSQL备份还原工具、主从复制、高可用_第67张图片

先启动任一一个服务器

剩余服务器用此命令启动

MYSQL备份还原工具、主从复制、高可用_第68张图片

你可能感兴趣的:(MYSQL备份还原工具、主从复制、高可用)