利用shell脚本备份数据库及网站,并用rsysnc工具同步文件到备份服务器
准备工作
-
两台debian系统的服务器A和B,安装rsysnc软件
apt-get install rsysnc
-
设置ssh免密rsa登录
# 在A服务器上运行命令: ssh-keygen -t rsa # 下面为对应密钥生成地址 公钥(id_rsa.pub)和私钥(id_rsa)。 # windows: C:\Users\<your_username>\.ssh # linux: /home/service/.ssh
-
将密钥写入到对应文件
# 把在A服务器上生成的id_rsa.pub上传到B服务器 # 同时在B服务器上,把id_rsa.pub秘钥,导入到authorized_keys中 echo "id_rsa.pub" >> ~/.ssh/authorized_keys # 经过上面步骤,可以实现A免密码登录B服务器。
-
B服务器备份脚本
#!/bin/bash DBUSR=root DBPWD=123456 DBNAME=typecho DBPATH=/mnt/backup/ LOG=$DBPATH'backup.log' # mysql data stored dir TODAY=`date +%F` STOREDIR=$DBPATH$TODAY mkdir $STOREDIR echo "***Start backup PATH:$STOREDIR***" >> $LOG # delete overtime backup files rm -rf $DBPATH$(date +%F --date='7 days ago') # backup data file cd /mnt/www/ && tar -czPf $STOREDIR/typecho.tar.tgz typecho && /usr/bin/docker exec mariadb /usr/bin/mysqldump --column-statistics=0 -u$DBUSR --password=$DBPWD --databases $DBNAME --lock-all-tables --flush-logs |gzip>$STOREDIR/$DBNAME.sql.gz
注意:脚本报错:OCI runtime exec failed: exec failed: unable to start container process: exec: "/usr/bin/mysqldump": stat /usr/bin/mysqldump: no such file or directory: unknown
容器没有安装mysql客户端,进入容器并安装mysql客户端
docker exec -it mariadb bash
apt-get update && apt-get install -y mysql-client
注意:脚本报错mysqldump: [Warning] Using a password on the command line interface can be insecure.
mysqldump: Couldn't execute 'SELECT COLUMN_NAME, JSON_EXTRACT(HISTOGRAM, '$."number-of-buckets-specified"') FROM information_schema.COLUMN_STATISTICS WHERE SCHEMA_NAME = 'typecho' AND TABLE_NAME = 'typecho_comments';': Unknown table 'COLUMN_STATISTICS' in information_schema (1109)
问题出现在尝试使用 mysqldump
工具备份数据库时,遇到了 Unknown table 'COLUMN_STATISTICS' in information_schema
的错误。这通常发生在尝试从 information_schema.COLUMN_STATISTICS
表中选择数据时,但该表在 information_schema
数据库中不存在。
这个问题在 MySQL 8.0 版本中尤为常见,因为在 MySQL 8.0 中,COLUMN_STATISTICS
表是新引入的,而在之前的版本中并不存在。如果您的 mysqldump
工具是针对 MySQL 8.0 或更高版本设计的,而您的数据库服务器运行的是旧版本的 MySQL,那么您可能会遇到这个问题。
为了解决这个问题,您可以尝试以下几种方法:
-
升级数据库服务器:如果您的应用程序和环境支持,可以考虑升级您的数据库服务器到 MySQL 8.0 或更高版本。
-
修改 mysqldump 命令:如果您无法升级数据库服务器,您可以尝试修改
mysqldump
命令,添加--column-statistics=0
参数来禁用对COLUMN_STATISTICS
表的查询。例如:mysqldump --column-statistics=0 -uroot --password='123456' --databases typecho --lock-all-tables --flush-logs | gzip > /mnt/typecho.sql.gz
-
修改 MySQL 配置文件:在
/etc/my.cnf
或~/.my.cnf
中添加以下内容,然后重启 MySQL 服务:[mysqldump] column-statistics=0
-
使用其他备份方法:如果上述方法都不适用,您可能需要考虑使用其他备份方法,例如使用物理备份工具(如
Percona XtraBackup
)或者使用数据库管理工具(如 MySQL Workbench)进行备份。
具体操作
A作为备份服务器,同步备份B服务器上指定文件夹:
rsync -avzr --delete --progress -e 'ssh -p 22' root@192.168.1.21:/mnt/backup/ /mnt/user/www/backup/
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。