【shell实战之编写备份脚本-12】

前提准备:安装Mariadb数据库
Mariadb安装

第一种方式:使用Mysqldump逻辑备份

1.备份多个数据库–分库备份:取出要备份的多个数据库赋值给一个变量,然后利用循环的方式进行多库备份

除了系统数据库:information_schema|Database|mysql|performance_schema
1)取出要备份的数据库:

[root@manager ~]# dbname=$(mysql -uroot -p123456 -e 'show databases;' | egrep -v 'information_schema|Database|mysql|performance_schema')

2)使用for循环:

[root@manager ~]# for db in $dbname; do echo $db; done
db1
school
[root@manager 1]# for db in $dbname; do mysqldump -uroot -p123456 -B $db | gzip > ${db}_$(date +%F).sql.gz; done
[root@manager 1]# ls
db1_2020-07-12.sql.gz                           school_2020-07-12.sql.gz

将上面的命令改进成一个脚本:

[root@manager sh]# cat 1.sh
#!/bin/bash
#*************************************************************
#Author: pyy
#Date:  2020-07-12
#FileName:      1.sh
#*************************************************************
exclude_db="information_schema|Database|mysql|performance_schema"
options="-uroot -p123456"
bak_path="/backup/mysql/$(date +%Y%m%d)"

[ -d $bak_path ] || mkdir  -p $bak_path

dbname=$(mysql $options -e 'show databases;' | egrep -v $exclude_db)
for db in $dbname
do
	mysqldump $options -B $db | gzip > ${bak_path}/${db}_$(date +%F).sql.gz
done

2.备份某个数据库的多表:

[root@manager sh]# cat 2.sh
#!/bin/bash
#*************************************************************
#Author: pyy
#Date:  2020-07-12
#FileName:      1.sh
#*************************************************************
options="-uroot -p123456"
bak_path="/backup/mysql/$(date +%Y%m%d)"
dbname="school"
[ -d $bak_path ] || mkdir  -p $bak_path

tabname=$(mysql $options -e "show tables from $dbname" | egrep -v Table)
for tab in $tabname
do
	mysqldump $options school $tab | gzip > ${bak_path}/${tab}_$(date +%F).sql.gz
done

3.分库分表备份:分别将数据库的表和数据库进行备份

[root@localhost sh]# cat 1.sh
#!/bin/bash
#*************************************************************
#Author: pyy
#Date:  2020-07-24
#FileName:      1.sh
#*************************************************************
#备份的数据库
others_db="Database|information_schema|performance_schema"
login="-uroot -pPineyang000!"
bak_path="/backup/mysql/$(date +%Y%m%d)"
bak_db=$(mysql $login -e 'show databases;' | egrep -v $others_db)
#测试每天备份根路径是否存在,不存在则创建
[ -d $bak_path ] || mkdir -p $bak_path

#备份数据库
for db in $bak_db
do
#测试备份数据库路径是否存在,不存在则创建
	[ -d $bak_path/$db ] || mkdir -p $bak_path/$db
	mysqldump $login -B $db &>/dev/null | gzip > $bak_path/$db/${db}_$(date +%Y%m%d).sql.gz 
#备份每个数据库中的表
	bak_tab=$(mysql $login -e "show tables from $db" | egrep -v Table)
	for tab in $bak_tab
	do
		mysqldump $login $db $tab &>/dev/null | gzip > $bak_path/$db/${tab}_$(date +%Y%m%d).sql.gz 
	done
done
[root@localhost ~]# ll /backup/mysql/
总用量 1
drwxr-xr-x 7 root root   67 725 11:35 20200724
[root@localhost ~]# ll /backup/mysql/20200724
总用量 16
drwxr-xr-x 2 root root  326 725 11:35 db1
drwxr-xr-x 2 root root  266 725 11:35 db2
drwxr-xr-x 2 root root  157 725 11:35 empinfo
drwxr-xr-x 2 root root 4096 725 11:35 mysql
drwxr-xr-x 2 root root 8192 725 11:35 sys

存在问题:
1.备份保存到本地,没有异地容灾
解决:将备份保存到其他服务器
可以使用ftp上传到备份服务器
可以使用rsync上传到备份服务器
注:服务器也要备份保留一段时间
2.本地磁盘空间有限

解决:备份保留一周。

[root@node1 yum.repos.d]# date -d '-7 day'
20200705日 星期日 11:58:00 CST
[root@node1 yum.repos.d]# date -d '-7 day' +%Y%m%d
20200705

第二种方式:使用innobackupex工具

重点:理解innobackupex备份请戳我

安装地址:https://www.percona.com/downloads/Percona-XtraBackup-LATEST/
帮助文档:https://www.percona.com/doc/percona-xtrabackup/8.0/backup_scenarios/full_backup.html

1.安装innobackupex的软件包: yum localinstall percona-xtrabackup-24-2.4.8-1.el7.x86_64.rpm

[root@manager sh]# yum localinstall percona-xtrabackup-24-2.4.8-1.el7.x86_64.rpm
[root@manager sh]# rpm -ql  percona-xtrabackup-24-2.4.8-1.el7.x86_64
/usr/bin/innobackupex
/usr/bin/xbcloud
/usr/bin/xbcloud_osenv
/usr/bin/xbcrypt
/usr/bin/xbstream
/usr/bin/xtrabackup
/usr/share/doc/percona-xtrabackup-24-2.4.8
/usr/share/doc/percona-xtrabackup-24-2.4.8/COPYING
/usr/share/man/man1/innobackupex.1.gz
/usr/share/man/man1/xbcrypt.1.gz
/usr/share/man/man1/xbstream.1.gz
/usr/share/man/man1/xtrabackup.1.gz
#innobackupex 帮助
[root@manager sh]# innobackupex --help

1.【完全备份】

innobacpupex备份命令(此次针对mysql数据库备份,使用的是root用户): innobackupex -uroot -pPineyang000! /backup/mysql

[root@manager sh]# innobackupex -u root -p Pineyang000! /backup/mysql

可以指定目录的时候去掉时间戳:–no-timestamp
备份成功后,查看/backup/mysql/时间戳下的文件

[root@localhost ~]# ll /backup/mysql/2020-07-12_14-22-17/
总用量 12340
-rw-r----- 1 root root      426 712 14:22 backup-my.cnf
drwxr-x--- 2 root root      274 712 14:22 db1
drwxr-x--- 2 root root       50 712 14:22 db2
-rw-r----- 1 root root      454 712 14:22 ib_buffer_pool
-rw-r----- 1 root root 12582912 712 14:22 ibdata1
drwxr-x--- 2 root root     4096 712 14:22 mysql
drwxr-x--- 2 root root     8192 712 14:22 performance_schema
drwxr-x--- 2 root root     8192 712 14:22 sys
-rw-r----- 1 root root       25 712 14:22 xtrabackup_binlog_info
-rw-r----- 1 root root      113 712 14:22 xtrabackup_checkpoints
-rw-r----- 1 root root      468 712 14:22 xtrabackup_info
-rw-r----- 1 root root     2560 712 14:22 xtrabackup_logfile

还原命令:
1.使用--apply-log:备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。 利用 --apply-log参数,此参数的作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态。

[root@localhost mysql]# innobackupex -u root -p 'Pineyang000!' --apply-log /backup/mysql/2020-07-12_14-22-17/

2.停止服务器,清空数据目录/var/lib/mysql/*
systemctl stop mysqld
rm -rf /var/lib/mysql/
*
3.使用--copy-back还原数据

[root@localhost mysql]# innobackupex -u root -p Pineyang000! --copy-back /backup/mysql/2020-07-12_14-22-17/

4.修改数据目录权限,启动服务

[root@localhost lib]# chown -R mysql:mysql /var/lib/mysql/
[root@localhost lib]# ll /var/lib/mysql
总用量 122920
drwxr-x--- 2 mysql mysql      274 712 14:43 db1
drwxr-x--- 2 mysql mysql       50 712 14:43 db2
-rw-r----- 1 mysql mysql      454 712 14:43 ib_buffer_pool
-rw-r----- 1 mysql mysql 12582912 712 14:43 ibdata1
-rw-r----- 1 mysql mysql 50331648 712 14:43 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 712 14:43 ib_logfile1
-rw-r----- 1 mysql mysql 12582912 712 14:43 ibtmp1
drwxr-x--- 2 mysql mysql     4096 712 14:43 mysql
drwxr-x--- 2 mysql mysql     8192 712 14:43 performance_schema
drwxr-x--- 2 mysql mysql     8192 712 14:43 sys
-rw-r----- 1 mysql mysql       26 712 14:43 xtrabackup_binlog_pos_innodb
-rw-r----- 1 mysql mysql      468 712 14:43 xtrabackup_info
[root@localhost lib]#systemctl restart mysqld

#还原之后mysql可以正常使用,数据什么都在

2.【增量备份】

--incremental 备份类型:增量备份
--incremental-basedir=指定上一次备份路径
--incremental-dir= 还原时指定增量备份路径
增量备份的前提:先准备好上一次的完全备份

[root@localhost mysql]# innobackupex -u root -p Pineyang000! --no-timestamp /backup/mysql/2020-07-24

第一次插入数据:

mysql> use db1;
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
mysql> insert into haha values(3);
Query OK, 1 row affected (0.04 sec)

mysql> select * from haha;
+------+
| id   |
+------+
|    3 |
+------+
1 row in set (0.00 sec)

第一次增量备份:

[root@localhost mysql]# innobackupex -u root -p Pineyang000! --incremental --incremental-basedir=/backup/mysql/2020-07-24 --no-timestamp /backup/mysql/incr1

第二次插入数据:

mysql> insert into haha values(4);
Query OK, 1 row affected (0.00 sec)

mysql> select * from haha;
+------+
| id   |
+------+
|    3 |
|    4 |
+------+
2 rows in set (0.00 sec)

第二次增量备份:

[root@localhost mysql]# innobackupex -u root -p Pineyang000! --incremental --incremental-basedir=/backup/mysql/incr1 --no-timestamp /backup/mysql/incr2

还原命令:
1、使用--apply-log命令回滚完全备份文件:通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态。

[root@localhost mysql]# innobackupex --apply-log --redo-only /backup/mysql/2020-07-24

2、把第一次增量备份数据合并到全量备份数据上

[root@localhost mysql]# innobackupex --apply-log --redo-only /backup/mysql/2020-07-24 --incremental-dir=/backup/mysql/incr1
#版本不同有的是 --apply-log-only (=--apply-log --redo-only)

此时第一次增量备份上的数据已经合并到全量备份上了,查看xtrabackup_checkpoints:发现完全备份的lsn和第一次增量备份的lsn相同

[root@localhost mysql]# more /backup/mysql/2020-07-24/xtrabackup_checkpoints 
backup_type = log-applied
from_lsn = 0
to_lsn = 22758355
last_lsn = 22758364
compact = 0
recover_binlog_info = 0
[root@localhost mysql]# more /backup/mysql/incr1/xtrabackup_checkpoints 
backup_type = incremental
from_lsn = 22757971
to_lsn = 22758355
last_lsn = 22758364
compact = 0
recover_binlog_info = 0

3、把第一次增量备份数据合并到全量备份数据上

[root@localhost mysql]# innobackupex --apply-log --redo-only /backup/mysql/2020-07-24 --incremental-dir=/backup/mysql/incr2

此时第二次增量备份上的数据已经合并到全量备份上了,查看xtrabackup_checkpoints:发现完全备份的lsn和第二次增量备份的lsn相同

[root@localhost mysql]# more /backup/mysql/2020-07-24/xtrabackup_checkpoints 
backup_type = log-applied
from_lsn = 0
to_lsn = 22758703
last_lsn = 22758712
compact = 0
recover_binlog_info = 0
[root@localhost mysql]# more /backup/mysql/incr2/xtrabackup_checkpoints 
backup_type = incremental
from_lsn = 22758355
to_lsn = 22758703
last_lsn = 22758712
compact = 0
recover_binlog_info = 0

4、停止服务器,清空数据目录

[root@localhost mysql]# systemctl stop mysqld
[root@localhost mysql]# rm -rf /var/lib/mysql/*

5、使用--copy-back还原完全备份数据

[root@localhost mysql]# innobackupex -u root -p Pineyang000! --copy-back /backup/mysql/2020-07-24
[root@localhost mysql]# ll /var/lib/mysql
总用量 188460
drwxr-x--- 2 root root     4096 724 21:51 db1
drwxr-x--- 2 root root      274 724 21:51 db2
drwxr-x--- 2 root root      130 724 21:51 empinfo
-rw-r----- 1 root root      454 724 21:51 ib_buffer_pool
-rw-r----- 1 root root 79691776 724 21:51 ibdata1
-rw-r----- 1 root root 50331648 724 21:50 ib_logfile0
-rw-r----- 1 root root 50331648 724 21:51 ib_logfile1
-rw-r----- 1 root root 12582912 724 21:51 ibtmp1
drwxr-x--- 2 root root     4096 724 21:51 mysql
drwxr-x--- 2 root root     8192 724 21:51 performance_schema
drwxr-x--- 2 root root     8192 724 21:51 sys
-rw-r----- 1 root root       25 724 21:51 xtrabackup_binlog_pos_innodb
-rw-r----- 1 root root      555 724 21:51 xtrabackup_info

#但是因为是root用户执行,所以/var/lib/mysql/下的数据文件的属主和属组都变成了root,所以在开启mysql服务时需要将该目录下的文件改为mysql
6、修改数据目录权限,然后重新启动服务验证

[root@localhost mysql]# chown -R mysql:mysql /var/lib/mysql/
[root@localhost mysql]# ll /var/lib/mysql
总用量 188460
drwxr-x--- 2 mysql mysql     4096 724 21:51 db1
drwxr-x--- 2 mysql mysql      274 724 21:51 db2
drwxr-x--- 2 mysql mysql      130 724 21:51 empinfo
-rw-r----- 1 mysql mysql      454 724 21:51 ib_buffer_pool
-rw-r----- 1 mysql mysql 79691776 724 21:51 ibdata1
-rw-r----- 1 mysql mysql 50331648 724 21:50 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 724 21:51 ib_logfile1
-rw-r----- 1 mysql mysql 12582912 724 21:51 ibtmp1
drwxr-x--- 2 mysql mysql     4096 724 21:51 mysql
drwxr-x--- 2 mysql mysql     8192 724 21:51 performance_schema
drwxr-x--- 2 mysql mysql     8192 724 21:51 sys
-rw-r----- 1 mysql mysql       25 724 21:51 xtrabackup_binlog_pos_innodb
-rw-r----- 1 mysql mysql      555 724 21:51 xtrabackup_info
[root@localhost mysql]# ll /var/lib/mysql -d
drwxr-x--x. 8 mysql mysql 241 724 21:51 /var/lib/mysql

启动服务,验证之前插入的数据是否存在

[root@localhost mysql]# systemctl restart mysqld
mysql> select * from haha;
+------+
| id   |
+------+
|    3 |
|    4 |
+------+
2 rows in set (0.00 sec)

3.实战:编写脚本

1.周日完成完全备份
2.周一至周六完成增量备份
结合计划任务完成自动化备份:每天的晚上2点执行一次脚本

[root@localhost sh]# crontab -e
0 2 * * * sh /root/sh/backdb_innobackup.sh &>/dev/null

分析:
1)如何判断今天是星期几?
[root@localhost init.d]# date +%u
7
[root@localhost init.d]# date +%w
0
2)如何获取昨天是几月几号?
[root@localhost sh]# date -d ‘-1 days’ +%Y%m%d
20200723
2)通过函数:
full_bak 完全备份
incr_bak 增量备份

[root@localhost sh]# cat bakdb_innobackup.sh
#!/bin/bash
#*************************************************************
#Author: pyy
#Date:  2020-07-24
#FileName:      bakdb_innobackup.sh
#*************************************************************
#day存放今天周几,today存放今天几月几号,yesterday存放昨天几月几号
day=$(date +%u)
bak_cmd="innobackupex  --user=root --password=123456 --no-timestamp"
bak_dir=/backup/mysql
today=$(date +%Y%m%d)
yesterday=$(date -d '-1 day' +%Y%m%d)
check=/tmp/checkbak
logfile=/tmp/baklog

# 全备Functions
#备份检查
full_bak () {
	$bak_cmd  $bak_dir/$today/full &>$check
}
#增备Functions
incr_bak () {
	$bak_cmd --incremental --incremental-basedir=$1  /backup/mysql/$today/incr$day &>$check
}
check_bak(){
	if grep 'innobackupex: completed OK!' $check &>/dev/null
	then
		echo "$(date) bak success..." >> $logfile
	else
		echo "bak failure..." >> $logfile
	fi
}
# Main Program
#测试今天备份路径是否存在,不存在则创建
[ -d $bak_dir/$today ] || mkdir -p $bak_dir/$today
case $day in
	1)
		bak_path=$bak_dir/$yesterday/full
		incr_bak $bak_path
		check_bak
		;;
	[2-6])
		bak_path=$bak_dir/$yesterday/incr$[day-1]
		incr_bak $bak_path
		check_bak
		;;
	*)
		full_bak
		check_bak
esac

第三种方式:使用tar打包命令实现web数据日志等文件的备份,并且将备份文件同步到服务器

1.使用rsync工具进行备份同步

首先搭建rsync服务器:守护进程方式
1.安装rsync软件,然后编辑配置文件

[root@localhost ~]# yum install -y rsync
[root@localhost ~]# cat /etc/rsyncd.conf 
# /etc/rsyncd: configuration file for rsync daemon mode

# See rsyncd.conf man page for more options.

# configuration example:

# uid = nobody
# gid = nobody
# use chroot = yes
# max connections = 4
# pid file = /var/run/rsyncd.pid
# exclude = lost+found/
# transfer logging = yes
# timeout = 900
# ignore nonreadable = yes
# dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

# [ftp]
#        path = /home/ftp
#        comment = ftp export area
#运行RSYNC守护进程的用户
uid = rsync
#运行RSYNC守护进程的组
gid = rsync
#不使用chroot
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
fake super = yes

#备份模块
[bak_data]
#备份路径
		path = /bak/web
		ignore errors
		read only = false
		list = false
		hosts allow = 192.168.131.0/24
		hosts deny = 0.0.0.0/32
#允许访问的用户,必须是密码文件中的
		auth users = rsync_backup
		secrets file = /etc/rsyncd.passwd

问题排除:如果报rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
解决:配置文件中缺少 fake super = yes,因为版本跟新问题,现在必需在 vim /etc/rsyncd.conf 添加 fake super = yes,再重启服务

3.准备用户并授权

[root@localhost ~]# mkdir -p /bak/web
[root@localhost ~]# useradd rsync -s /sbin/nologin -M
[root@localhost ~]# chown -R rsync:rsync /bak/web

4.配置用于rsync同步的密码文件

[root@localhost ~]# echo "rsync_backup:123456" >> /etc/rsyncd.passwd
[root@localhost ~]# cat /etc/rsyncd.passwd 
rsync_backup:123456
[root@localhost ~]# chmod 600 /etc/rsyncd.passwd 
[root@localhost ~]# ll /etc/rsyncd.passwd 
-rw------- 1 root root 20 Sep  7 17:29 /etc/rsyncd.passwd

5.以守护进程方式启动服务 systemctl start rsyncd
测试是否开启:

[root@localhost ~]# lsof -i tcp:873
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rsync   14980 root    4u  IPv6  62669      0t0  TCP *:rsync (LISTEN)
rsync   14980 root    5u  IPv4  62670      0t0  TCP *:rsync (LISTEN)

[root@localhost ~]# netstat -lntup | grep 873
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      14980/rsync         
tcp        0      0 :::873                      :::*                        LISTEN      14980/rsync

客户端只需安装rsync以及编写密码文件即可:之后启动rsyncd服务

[root@localhost ~]# yum install -y rsync
[root@localhost ~]# echo "123456" > /etc/rsyncd.passwd
[root@localhost ~]# cat /etc/rsyncd.passwd 
123456
[root@localhost ~]# chmod 600 /etc/rsyncd.passwd 
[root@localhost ~]# ll /etc/rsyncd.passwd 
-rw------- 1 root root 7 Sep  7 17:45 /etc/rsyncd.passwd
[root@localhost ~]# systemctl status rsyncd

这样rsync服务器和客户端就搭建好了,接下来在客户端192.168.131.108实现web数据、配置、日志文件的备份。并且将备份好的文件同步到服务器192.168.131.109
客户端安装httpd软件:

[root@localhost ~]# yum install -y httpd

编写备份脚本:

[root@node1 sh]# cat bak_web.sh 
#!/bin/bash
#*************************************************************
#Author: pyy
#Date:  2020-07-25
#FileName:      bak_web.sh
#*************************************************************
bak_dir=/bak/web
web_data=/var/www/html
config_data="/etc/rc.local /sh /etc/httpd/conf/httpd.conf"
log_data=/var/log/httpd
today=`date +%F`
flag_file=flag.$today.txt
del_date=`date -s "-7 day" +%F`

[ -d $bak_dir ] || mkdir -p $bak_dir
tar czPf $bak_dir/web_data.$today.tar.gz $web_data 
tar czPf $bak_dir/config_data.$today.tar.gz $config_data 
tar czPf $bak_dir/log_data.$today.tar.gz $log_data

#备份成功后生成md5
if [ $? -eq 0 ]
then
	find $bak_dir -type f -name "*.$today.tar.gz" | xargs md5sum >> $bak_dir/$flag_file
else
	echo "backup failure" >> $bak_dir/$flag_file
	exit 2
fi

#上传到rsync服务器
rsync -avzp $bak_dir/ rsync://rsync_backup@192.168.131.109/bak_data --password-file=/etc/rsyncd.passwd &>/dev/null

#删除7天前的备份文件
rm -rf $bak_dir/$del_date

问题排错: No route to host 问题
解决:可能防火墙阻挡了。关闭防火墙即可

运行脚本,查看是否备份,是否同步:
客户端:

[root@node1 sh]# sh bak_web.sh 
[root@node1 sh]# ll /bak/web/
总用量 20
-rw-r--r-- 1 root root 4734 516 12:12 config_data.2020-05-23.tar.gz
-rw-r--r-- 1 root root  213 516 12:12 flag.2020-05-23.txt
-rw-r--r-- 1 root root 1269 516 12:12 log_data.2020-05-23.tar.gz
-rw-r--r-- 1 root root  181 516 12:12 web_data.2020-05-23.tar.gz
[root@node1 sh]# cat /bak/web/flag.2020-05-23.txt 
cc26bba35e9a418f0703944843f19df9  /bak/web/web_data.2020-05-23.tar.gz
19436635c4123ba90db63dbb6d3d98b7  /bak/web/config_data.2020-05-23.tar.gz
c122b983ca3c9da6978388f71627b429  /bak/web/log_data.2020-05-23.tar.gz

服务端:

[root@localhost ~]# ll /bak/web/
总用量 20
-rw-r--r-- 1 rsync rsync 4734 516 12:12 config_data.2020-05-23.tar.gz
-rw-r--r-- 1 rsync rsync  213 516 12:12 flag.2020-05-23.txt
-rw-r--r-- 1 rsync rsync 1269 516 12:12 log_data.2020-05-23.tar.gz
-rw-r--r-- 1 rsync rsync  181 516 12:12 web_data.2020-05-23.tar.gz

2.使用ftp工具进行备份同步

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骑着蜗牛追汤圆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值