数据备份重要性:mysql
数据尤为是一个公司的核心数据关系着公司的命脉,数据丢失能够致使公司倒闭。
数据主要分为两大类:linux
文件类: 程序代码、图片、附件、软件包、配置文件 数据(数据库)类: 关系型数据库(MySQL/MariaDB等)、非关系型数据库(Redis、MongoDB等)
备份原则:git
每日一备份,本地保存一份,远程保存一份,根据数据重要性和磁盘空间决定保存周期。
文件类的备份:github
tar、scp、cp、rsync
数据类:sql
自带工具实现备份(如,mysqldump、Xtrabackup)
rsync教程数据库
rsync -av /etc/passwd /tmp/1.txt rsync -av /tmp/1.txt 192.168.188.128:/tmp/2.txt rsync格式 rsync [OPTION] … SRC DEST rsync [OPTION] … SRC [user@]host:DEST rsync [OPTION] … [user@]host:SRC DEST rsync [OPTION] … SRC [user@]host::DEST rsync [OPTION] … [user@]host::SRC DEST rsync经常使用选项 -a 包含-rtplgoD -r 同步目录时要加上,相似cp时的-r选项 -v 同步时显示一些信息,让咱们知道同步的过程 -l 保留软链接 -L 加上该选项后,同步软连接时会把源文件给同步 -p 保持文件的权限属性 -o 保持文件的属主 -g 保持文件的属组 -D 保持设备文件信息 -t 保持文件的时间属性 --delete 删除DEST中SRC没有的文件 --exclude 过滤指定文件,如--exclude “logs”会把文件名包含logs的文件或者目录过滤掉,不一样步 -P 显示同步过程,好比速率,比-v更加详细 -u 加上该选项后,若是DEST中的文件比SRC新,则不一样步 -z 传输时压缩 rsync经过ssh方式同步 rsync -av test1/ 192.168.133.132:/tmp/test2/ rsync -av -e "ssh -p 22" test1/ 192.168.133.132:/tmp/test2/ rsync 经过服务的方式同步 要编辑配置文件/etc/rsyncd.conf 启动服务rsync --daemon 格式:rsync -av test1/ 192.168.133.130::module/dir/ rsyncd.conf样例 port=873 log file=/var/log/rsync.log pid file=/var/run/rsyncd.pid address=192.168.133.130 [test] path=/root/rsync use chroot=true max connections=4 read only=no list=true uid=root gid=root auth users=test secrets file=/etc/rsyncd.passwd hosts allow=192.168.133.132 1.1.1.1 2.2.2.2 192.168.133.0/24 rsyncd.conf配置文件详解 port:指定在哪一个端口启动rsyncd服务,默认是873端口。 log file:指定日志文件。 pid file:指定pid文件,这个文件的做用涉及服务的启动、中止等进程管理操做。 address:指定启动rsyncd服务的IP。假如你的机器有多个IP,就能够指定由其中一个启动rsyncd服务, 若是不指定该参数,默认是在所有IP上启动。 []:指定模块名,里面内容自定义。 path:指定数据存放的路径。 use chroot true|false:表示在传输文件前首先chroot到path参数所指定的目录下。这样作的缘由是实现额外的安全防御, 但缺点是须要以roots权限,而且不能备份指向外部的符号链接所指向的目录文件。默认状况下chroot值为true, 若是你的数据当中有软链接文件,阿铭建议你设置成false。 max connections:指定最大的链接数,默认是0,即没有限制。 read only ture|false:若是为true,则不能上传到该模块指定的路径下。 list:表示当用户查询该服务器上的可用模块时,该模块是否被列出,设定为true则列出,false则隐藏。 uid/gid:指定传输文件时以哪一个用户/组的身份传输。 auth users:指定传输时要使用的用户名。 secrets file:指定密码文件,该参数连同上面的参数若是不指定,则不使用密码验证。 注意该密码文件的权限必定要是600。 格式:用户名:密码 hosts allow:表示被容许链接该模块的主机,能够是IP或者网段,若是是多个,中间用空格隔开。 当设置了auth users和secrets file后,客户端连服务端也须要用用户名密码了, 若想在命令行中带上密码,能够设定一个密码文件 rsync -avL test@192.168.133.130::test/test1/ /tmp/test8/ --password-file=/etc/pass 其中/etc/pass内容就是一个密码,权限要改成600
mysqldump教程安全
备份数据库的命令为: mysqldump -ubackup -pxxxxx db1 > db1.sql 若是是远程的MySQL服务,还能够加上IP和Port,例如: mysqldump -ubackup -pxxxxx -h192.168.100.100 -P3308 db1 > db1.sql mysqldump工具经常使用的几个用法,以下: 1)只备份表结构,不备份数据 mysqldump -ubackup -pxxxxx -h192.168.100.100 -P3308 -d db1 > db1.sql 2)只备份数据,不备份表结构 mysqldump -ubackup -pxxxxx -h192.168.100.100 -P3308 -t db1 > db1.sql 3)只备份指定表 mysqldump -ubackup -pxxxxx -h192.168.100.100 -P3308 db1 tb1 > db1_tb1.sql 4)备份所有数据库 mysqldump -ubackup -pxxxxx -h192.168.100.100 -P3308 -A > all_db.sql 5)备份指定多个库 mysqldump -ubackup -pxxxxx -h192.168.100.100 -P3308 -B db1 db2 > db12.sql 恢复数据: mysql -uroot -pxxxxx dbname < xxx.sql
xtrabackup教程bash
提供一个参考文档:http://xtra.aminglinux.com mysqldump对于导出几个G的数据库或几个表,仍是不错的,速度并不慢。一旦数据量达到几十上百G, 不管是对原库的压力仍是导出的性能,mysqldump就力不从心了。Percona-Xtrabackup备份工具, 是实现MySQL在线热备工做的不二选择,可进行全量、增量、单表备份和还原。 xtrabackup命令只支持InnoDB和XtraDB存储引擎的数据库非阻塞地备份, 而innobackupex经过perl封装了一层xtrabackup,对MyISAM的备份经过加表读锁的方式实现。 在CentOS7上这样安装percona-xtrabackup 安装yum源 rpm -ivh http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm yum install -y percona-xtrabackup-24 //yum安装2.4版本 用xtrabackup作全量备份的命令是: innobackupex --defaults-file=/etc/my.cnf --host=10.100.100.100 --port=3333 \ --user=bakuser --password=your_pass /data/backup/mysql 说明:在执行该备份操做以前,须要先建立一个用户bakuser(用户名自定义), 并授予reload, lock tables, replication client, process, super等权限。 备份数据将会放到/data/backup/mysql目录里面,自动生成一个以当前日期、时间为名字的目录,例如2018-10-15_03_00_01。 增量备份: innobackupex --host=10.100.100.100 --port=3333 --user=bakuser --password=your_pass \ --incremental /data/backup/mysql --incremental-basedir=/data/backup/mysql/last-backup-file 说明: --incremental :表示本次备份是一个增量备份(若针对的上次备份为一个全量备份,这里也能够认为是个差量备份) --incremental-basedir:指定本次增量备份针对的哪个备份(能够是上个增量,也能够是上个全量) 增量备份能够一环扣一环,好比能够周一作一个全量备份,而后周二作周一的增量,周三作周二的增量。。。 恢复: 1)全量备份的恢复 预备恢复:innobackupex --apply-log /PATH/TO/BACKUP/dir-quan --user-memroy=2G 中止MySQL/MariaDB,将datadir目录里面的数据清空(或者挪走) 恢复:innobackupex --defaults-file=/etc/my.cnf --copy-back /PATH/TO/BACKUP/dir-quan 改权限:chown -R mysql:mysql /PATH/TO/datadir 启动MySQL/MariaDB 说明: --apply-log:指定全备文件路径 --use-memory=N:指定恢复数据时,使用内存大小,默认为100M,若备份数据量大且有足够的空闲内存时, 能够用来指定大小的内存来工做,单位可使用G,M....。 --defaults-file: 指定配置文件路径,经过配置文件它会找到datadir在哪里 2)增量备份的恢复 中止服务 删除dataidir里面的数据 准备全量: innobackupex --apply-log --redo-only /PATH/TO/全量备份目录 准备增量1: innobackupex --apply-log --redo-only /PATH/TO/全量备份目录 --incremental-dir=/PATH/TO/第一次增量备份目录 准备增量2: innobackupex --apply-log --redo-only /PATH/TO/全量备份目录 --incremental-dir=/PATH/TO/第二次增量备份目录 ...... 准备最后一个增量: innobackupex --apply-log /PATH/TO/全量备份目录 --incremental-dir=/PATH/TO/最后一次增量备份目录 再次准备全量: innobackupex --apply-log /PATH/TO/全量备份目录 #(此次不用加--redo-only了) 恢复: innobackupex --copy-back /PATH/TO/全量备份目录 改权限:chown -R mysql:mysql /PATH/TO/datadir 启动MySQL/MariaDB 说明:--redo-only:表示进行准备(应用日志)工做时,只进行redo操做,只会重作已提交但未应用的事务, 不会回滚未提交的事务。缘由是后面还有个增量备份,未提交的可能在后面增量备份时进行提交。 须要注意的是,最后一个增量备份不须要加这个选型。
MariaDB新版本(10.3.x+)的备份和恢复服务器
MariaDB10.3.x及以上的版本用Percona XtraBackup工具会有问题。 缘由多是MariaDB10.3以上版本的redo日志格式和以前不一样了。 解决方案是,使用mariabackup,它是MariaDB提供的一个开源工具,用于对InnoDB,Aria和MyISAM表进行物理在线备份。 这个工具是基于Percona的XtraBackup(版本2.3.8)的解决方案: 全量备份: mariabackup --defaults-file=/etc/my.cnf --backup --user=xxx --password=xxx --target-dir /data/backup/2019-02-21 全量恢复: 中止数据库 清空datadir mariabackup --prepare --target-dir /data/backup/2019-02-21/ mariabackup --copy-back --target-dir /data/backup/2019-02-21/ 改属主、属组 启动 增量备份: mariabackup --defaults-file=/etc/my.cnf --backup --user=xxx --password=xxx --target-dir /data/backup/2019-02-21 第一个增量:mariabackup --backup --user=xxx --password=xxx --target-dir /data/backup/2019-02-21_inc1 --incremental-basedir /data/backup/2019-02-21 第二个增量:mariabackup --backup --user=xxx --password=xxx --target-dir /data/backup/2019-02-21_inc2 --incremental-basedir /data/backup/2019-02-21_inc1 增量恢复: 先准备全备 mariabackup --prepare --target-dir /data/backup/2019-02-21 --apply-log-only 准备第一个增量: cd /data/backup mariabackup --prepare --target-dir ./2019-02-21 --incremental-dir ./2019-02-21_inc1 --apply-log-only 准备第二个增量: mariabackup --prepare --target-dir ./2019-02-21 --incremental-dir ./2019-02-21_inc2 --apply-log-only 恢复: mariabackup --copy-back --target-dir ./2019-02-21
备份脚本app
#!/bin/bash bakdir=/data/backup d=`date +%F` for db in bbs blog db2 do mysqldump -uroot -paminglinux $db > $bakdir/$db\_$d.sql done cd $bakdir gzip *_$d.sql find ./ -name "*.gz" -mtime +30 |xargs rm
原文连接:https://github.com/aminglinux/linux2019/blob/master/5.49-%E6%95%B0%E6%8D%AE%E5%A4%87%E4%BB%BD.md