版本
-
ubuntu版本
ubuntu18.04
-
SQLServer版本
sqlcmd -S localhost -U SA -P 'XXXX' -Q"SELECT @@VERSION" -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- ------------------------------------------------------------ Microsoft SQL Server 2019 (RTM-CU4) (KB4548597) - 15.0.4033.1 (X64) Mar 14 2020 16:10:35 Copyright (C) 2019 Microsoft Corporation Developer Edition (64-bit) on Linux (Ubuntu 18.04.4 LTS) <X64>
备份
使用sqlcmd
备份,在用户目录下新建三个shell执行文件,分别用于执行备份。
-
完全备份
sqlcmd -S localhost -U SA -P 'XXXX' -Q "BACKUP DATABASE [XXDatabase] TO DISK = N'/var/opt/mssql/data/backup/XXDatabase_full.bak' WITH INIT, SKIP,NAME = 'XXDatabase-full'"
-
差异备份
sqlcmd -S localhost -U SA -P 'XXXX' -Q "BACKUP DATABASE [XXDatabase] TO DISK = N'/var/opt/mssql/data/backup/GDQXCENT_diff.bak' WITH DIFFERENTIAL,INIT,SKIP, NAME = 'XXDatabase-diff'"
-
日志备份
sqlcmd -S localhost -U SA -P 'XXXX' -Q "BACKUP LOG [XXDatabase] TO DISK = N'/var/opt/mssql/data/backup/GDQXCENT_log.bak' WITH INIT,SKIP"
还原
使用sqlcmd
还原
sqlcmd -S localhost -U SA -P 'XXXX' -Q "RESTORE DATABASE [XXDatabase] FROM DISK = N'/var/opt/mssql/data/backup/XXDatabase_full.bak' WITH NORECOVERY"
如果不需要差异还原,则不需要NORECOVERY
自动备份
使用crontab自动备份
使用管理员权限执行sudo crontab -e
30 3 * * * sh /home/userx/scripts/mssql_backup_diff.sh
40 3 * * * sh /home/userx/scripts/mssql_backup_log.sh
0 3 * * 1,3,6 sh /home/userx/scripts/mssql_backup_full.sh
每天凌晨备份,每周一、三、六完全备份。
异地备份
使用rclone
推送到数据中心服务器。便于统一管理,我在服务器搭建了 MinIO
仍然使用sudo crontab -e
10 4 * * * rclone sync /var/opt/mssql/data/backup/XXDatabase_diff.bak minio:database-180
0 4 * * * rclone sync /var/opt/mssql/data/backup/XXDatabase_log.bak minio:database-180
注意
- 如果sqlserver密码有字符,需要用单引号。
- rclone是使用root用户执行的,需要将我们用户目录下的配置文件复制一份到/root目录下