美文网首页
LVM逻辑卷备份数据库

LVM逻辑卷备份数据库

作者: 念念OPS | 来源:发表于2021-01-18 23:30 被阅读0次
image

1.database准备阶段

业务数据库如下

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| hellodb            |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

业务表如下

mysql> show tables;
+-------------------+
| Tables_in_hellodb |
+-------------------+
| classes           |
| coc               |
| courses           |
| scores            |
| students          |
| teachers          |
| testlog           |
| toc               |
+-------------------+
8 rows in set (0.00 sec)

表testlog有十万行数据

mysql> select count(*) from testlog;
+----------+
| count(*) |
+----------+
|   100000 |
+----------+
1 row in set (0.08 sec)

hellodb库下一个存储过程procedure

(root@localhost) [hellodb]> create table testlog(id int auto_increment primary key,name char(10),age int default 20);
Query OK, 0 rows affected (0.03 sec)

(root@localhost) [hellodb]> delimiter //
(root@localhost) [hellodb]> create procedure sp_testlog()
begin
declare i int;
set i=1;
while i <= 100000
do insert into testlog(name,age) values(concat("wang",i),i);
set i=i+1;
end while;
end//
Query OK, 0 rows affected (0.03 sec)

(root@localhost) [hellodb]> delimiter ;

目录文件结构

root@8  mysql]# tree -d /mysql/
/mysql/
└── 3306
    ├── binlog
    ├── data
    │   ├── hellodb
    │   ├── #innodb_temp
    │   ├── lost+found
    │   ├── mysql
    │   ├── performance_schema
    │   └── sys
    ├── etc
    ├── log
    ├── pid
    ├── sock
    └── trans_log

#数据目录如下 在逻辑卷上 剩下的所有目录包括二进制目录都在本地根分区的磁盘(懒得做了),生产需要二进制日志所在目录与数据目录都分离为单独的固态硬盘
root@8  mapper]# lsblk /dev/vg_mysql_data/lv_data
NAME                  MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vg_mysql_data-lv_data 253:0    0   5G  0 lvm  /mysql/3306/data

2.backupserver准备阶段

准备好各种目录

mkdir -p /mysql/3306/{data,log,binlog,trans_log,sock,pid,etc}
chown -R mysql.mysql /mysql/

准备相同版本的软件并配置好变量

root@8  ~]# which mysql
/usr/local/mysql/bin/mysql
root@8  ~]# mysql -V
mysql  Ver 8.0.19 for linux-glibc2.12 on x86_64 (MySQL Community Server - GPL)

准备好unit文件

root@17  data]# cat /lib/systemd/system/mysqld3306.service
[Unit]
Description=mysql database server
After=network.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/mysql/3306/etc/my.cnf
LimitNOFILE=65535

3.database服务器备份操作

backupserver准备脚本

yum -y install autoconf libaio-devel numactl-libs libtinfo* net-tools vim wget gcc gcc-c++ lrzsz rsync &>/dev/null

id mysql &>/dev/null && { action "mysql already exists";usermod -u306 -md /data/mysql -s /sbin/nologin mysql &>/dev/null; } || { useradd -r -u306 -d /data/mysql -s /sbin/nologin mysql &>/dev/mull; }

mkdir -p /mysql/3306/{data,log,binlog,trans_log,sock,pid,etc} &>/dev/null
chown -R mysql.mysql /mysql/

准备database LVM全备份脚本

cat > /root/mysqlbackup.sh <<EOF
#!/bin/bash
#写PATH变量
PATH=/usr/local/mysql/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

#定义一些变量 我测试数据库没密码  生产中需要mysql_password变量写进密码
bk_server="root@10.0.0.17"
mysql_user="root"
mysql_password=""
bk_password="123456"  #备份服务器密码
bk_user=root  #备份服务器登陆用户
data_dir="/mysql/3306/data"  #数据库数据目录
cnf_dir="/mysql/3306/etc"  #数据库配置文件目录

vg_dir="/dev/vg_mysql_data"  #卷组
snap_name="snap_data"  #创建时候快照卷名字
snap_data="\${vg_dir}/\${snap_name}"  #数据库数据目录所在的逻辑卷名称
lv_data="\${vg_dir}/lv_data"  #快照卷名称

#调用expect免交互 执行数据库服务器到备份服务器的公钥推送
expect <<END
set timeout 10
spawn ssh-copy-id \$bk_server
expect {
    "yes/no" { send "yes\n";exp_continue }
    "password" { send "\${bk_password}\n" }
}
expect eof
END

#数据库加 这里生产用密码上面变量有定义。加全局读锁,刷新二进制日志,记录此时最新的二进制日志位置
mysql -uroot -e 'FLUSH TABLES WITH READ LOCK; FLUSH LOGS;show master status' > ~/binlog_flush.sql
#做数据目录的逻辑卷快照
lvcreate -n \${snap_name} -s -p r -L 100M \${lv_data}
#解锁
mysql -uroot -e 'UNLOCK TABLES;'

#挂载快照卷并压缩打包备份
mount -o ro \${vg_dir}/\${snap_name} /mnt
cd /mnt && tar -czf /backup/mysql_bk`date +%F-%H`.gz *
rsync -auv /backup/ \${bk_server}:\${data_dir} && umount /mnt
#我这里将10.0.0.8数据库主机的/mnt逻辑卷目录下的文件压缩到/backup目录,并执行rsync远程增量备份 -av保留权限所有者所属主 -u表示目标比源新 不会覆盖更新。

#免交互删除快照卷
expect <<END
set timeout 5
spawn lvremove \${snap_data}
expect "Do" { send "y\n" }
expect eof
END

#rsync备份二进制日志位置文件到备份主机家目录
#rsync备份配置文件到备份主机的配置文件目录
rsync -av ~/binlog_flush.sql \${bk_server}:~/
rsync -av \${cnf_dir}/my.cnf \${bk_server}:\${cnf_dir}/

#备份unit服务文件
rsync -av /lib/systemd/system/mysqld.service \${bk_server}:/lib/systemd/system/mysql3306.service
EOF

定时任务备份文件

cat >> /var/spool/cron/root <<EOF
0 24 * * */1 /bin/bash /root/mysqlbackup.sh
0 23 */1 * *  /bin/bash /root/binlogbackup.sh
EOF

4.还原时候看看有没有之前创建的十万行数据

先全备份还原。
再追加二进制日志还原

备份还原则需要根据/root/binlog_flush.sql的位置之后的二进制文件来追加还原。mysqlbinlog /mysql/3306/binlog/mysql-bin.0000xx > /PATH/TO/FILE二进制文件

root@17  data]# tar xf mysql_bk2021-01-19-12.gz
root@17  data]# ll
total 73016
-rw-r----- 1 mysql mysql       56 Jan 18 18:28 auto.cnf
-rw------- 1 mysql mysql     1676 Jan 18 18:28 ca-key.pem
-rw-r--r-- 1 mysql mysql     1112 Jan 18 18:28 ca.pem
-rw-r--r-- 1 mysql mysql     1112 Jan 18 18:28 client-cert.pem
-rw------- 1 mysql mysql     1680 Jan 18 18:28 client-key.pem
drwxr-x--- 2 mysql mysql        6 Jan 18 21:13 db1
drwxr-x--- 2 mysql mysql     4096 Jan 18 21:13 hellodb
-rw-r----- 1 mysql mysql     5801 Jan 18 18:28 ib_buffer_pool
-rw-r----- 1 mysql mysql 12582912 Jan 19 11:52 ibdata1
-rw-r----- 1 mysql mysql 12582912 Jan 18 18:28 ibtmp1
drwxr-x--- 2 mysql mysql      187 Jan 18 18:28 #innodb_temp
drwx------ 2 root  root         6 Jan 18 18:25 lost+found
drwxr-x--- 2 mysql mysql      143 Jan 18 18:28 mysql
-rw-r--r-- 1 root  root   3401634 Jan 19 12:35 mysql_bk2021-01-19-12.gz
-rw-r----- 1 mysql mysql 25165824 Jan 18 21:22 mysql.ibd
drwxr-x--- 2 mysql mysql     8192 Jan 18 18:28 performance_schema
-rw------- 1 mysql mysql     1680 Jan 18 18:28 private_key.pem
-rw-r--r-- 1 mysql mysql      452 Jan 18 18:28 public_key.pem
-rw-r--r-- 1 mysql mysql     1112 Jan 18 18:28 server-cert.pem
-rw------- 1 mysql mysql     1680 Jan 18 18:28 server-key.pem
drwxr-x--- 2 mysql mysql       28 Jan 18 18:28 sys
-rw-r----- 1 mysql mysql 10485760 Jan 18 21:22 undo_001
-rw-r----- 1 mysql mysql 10485760 Jan 18 21:22 undo_002

我们看到权限被保留了
root@17  data]# systemctl start mysqld3306
root@17  data]# ss -lnt|awk {print}
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port
LISTEN     0      128          *:22                       *:*
LISTEN     0      70        [::]:33060                 [::]:*
LISTEN     0      128       [::]:3306                  [::]:*
LISTEN     0      128       [::]:22                    [::]:*

root@17  data]# mysql hellodb  -S /mysql/3306/sock/mysql.sock -e 'select count(*) from testlog'
+----------+
| count(*) |
+----------+
|   100001 |
+----------+
我们看到全备份数据被保留。剩下的就是追加二进制日志

根据家目录下binlog_flush.sql文件位置确定数据库主机全备份后的二进制文件
root@17  ~]# ll binlog_flush.sql
-rw-r--r-- 1 root root 86 Jan 19 12:35 binlog_flush.sql
root@17  ~]# cat binlog_flush.sql
File    Position    Binlog_Do_DB    Binlog_Ignore_DB    Executed_Gtid_Set
mysql-bin.000030    155
我们看到 在mysql-bin.000030文件的position=155之后是全备份后的二进制日志

#在数据库主机操作
mysqlbinlog start-position=155 mysql-bin.000030 > /root/binlogbk.sql
把该文件scp到备份主机上 mysql < /root/binlogbk.sql

相关文章

  • 数据库热备份神器 - XtraBackup

    常见的热备份方案 LVM方案 利用Linux的LVM技术来实现热备份,将MySQL的数据目录放到LVM逻辑卷上,然...

  • LVM逻辑卷备份数据库

    1.database准备阶段 业务数据库如下 业务表如下 表testlog有十万行数据 hellodb库下一个存储...

  • 2019-01-21mysql 物理备份

    一、tar备份数据库 二、lvm 快照实现物理备份 +binlog 1,lvm备份mysql的前提 2,创建库,表...

  • LVM逻辑卷

    LVM逻辑卷是管理磁盘的一种方式,性质与基本磁盘无异。LVM可以随意扩张大小,缩减大小,快照备份。 对于磁盘的管理...

  • mysql 备份、同步操作

    (第二十一周作业) 1、对数据库实现lvm2的备份和慢查询优化 1.1 LVM2备份操作 配合lvm2实现数据库备...

  • LVM快照备份流程

    LVM备份MYSQL的前提(2选1):将已运行mysql迁移到LVM卷

  • LVM学习_逻辑卷管理

    Linux 逻辑卷管理LVM 什么是 LVM LVM 逻辑卷管理是Linux环境下对磁盘分区进行管理的一种机制;L...

  • LVM逻辑卷配置过程

    LVM逻辑卷配置过程详解 LVM原理 要想理解好LVM的原理,我们必须首先要掌握4个基本的逻辑卷概念。 ①PE(P...

  • mysql的备份和迁移

    备份 热备lvm和xtrabackup:lvm支持分区,只要能否分区的数据库都支持这种方式进行热备;缺点就是备份期...

  • 存储管理Ⅱ-swap、逻辑卷

    一.存储管理Ⅱ 1.逻辑卷LVM 1.1.LVM管理 在线扩容 online 创建LVM VG的扩容 LVM的扩容...

网友评论

      本文标题:LVM逻辑卷备份数据库

      本文链接:https://www.haomeiwen.com/subject/pxmfzktx.html