1、安装sqlserver的具体步骤参考官网文档即可,很详细,链接地址如下:
https://docs.microsoft.com/zh-cn/sql/linux/quickstart-install-connect-red-hat?view=sql-server-ver15
2、所有的步骤都安装以后,微软有个最佳建议,文档见如下链接:
https://docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-performance-best-practices?view=sql-server-ver15
3、完成上面两步以后,数据库基本上就可以使用了。但是目前国内的阿里云,腾讯云的系统盘也就只有40g和50g,这要是放海量的数据肯定是不行的,需要把数据库文件放到挂载的数据盘上会比较好,接下来的操作就是把新建的数据库可以保存到挂载的数据盘上的操作步骤。
3.1 首先在数据盘上创建数据存放的目录,由于sqlserver使用的用户组和用户都是mssql,所以创建目录需要使用如下的命令:
# 组织排序方式 输入规则:Chinese_PRC_CI_AS
sudo /opt/mssql/bin/mssql-conf set-collation
# 在这里首先执行一下这个命令把,开启mssql-server的代理服务
/opt/mssql/bin/mssql-conf set sqlagent.enabled true
# 重启服务器
systemctl restart mssql-server.service
# 切换到数据盘相应的目录下
cd /newdisk
# 创建sqlserver的数据库即备份文件目录
mkdir mssql_data
# 修改目录的用户所属
chown -R mssql:mssql ./mssql_data/
经过3.1的操作基本上就可以在数据盘创建数据库了。但是问题又来了,数据毋庸置疑是昂贵的,自动备份肯定是少不了的,但是Linux下的sqlserver安装成功以后sqlserver代理是禁用的,禁用这个功能就不能实现自动备份,接下来的操作就是开启sqlserver代理。
4、开启sqlserver功能,官网有文档介绍,链接地址如下:
https://docs.microsoft.com/zh-cn/sql/database-engine/configure-windows/agent-xps-server-configuration-option?redirectedfrom=MSDN&view=sql-server-ver15
https://docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-setup-sql-agent?view=sql-server-ver15
https://docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-configure-mssql-conf?view=sql-server-ver15
根据官网执行完sql语句以后需要重启一下sqlserver的服务,命令如下所示:
systemctl restart mssql-server.service
这个时候重新链接一下数据库,不出意外的话,sqlserver代理应该是开启的了。这个时候在管理工具创建数据库备份的操作就自行百度把。推荐使用命令行备份数据库。
https://docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-run-sql-server-agent-job?view=sql-server-linux-2017
5、使用命令行备份数据库,命令行1是保存为bak文件,命令行2是保存为tar文件,根据需要使用即可,代码如下:
#/bin/bash
# 数据库用户名称
user=username
# 登录密码
passwd=your password
# 备份地址(一定是mssql的用户组)
back_path=/newdisk/sqlbak/
# 数据库名称
db_name=test
# 数据库的备份时间
back_time=`date +%Y%m%d_%H%M%S`
# 数据库备份的名称:{路径}{数据库名称}{时间}
back_filename=$back_path$db_name$back_time
# 需要删除的历史备份文件,保留15天内的数据库备份,由于每天可能会备份多次,这里需要使用通配符删除当天所有的数据库备份
del_time=`date -d "15 day ago" +"%Y%m%d_*"`
# 数据库备份的名称:{路径}{数据库名称}{时间}
del_backfile=$back_path$db_name$del_time
# 执行数据库备份
/opt/mssql-tools/bin/sqlcmd -S localhost -U $user -P $passwd -d master -Q "BACKUP DATABASE $db_name to disk='$back_filename.bak'"
# 只有在数据库备份成功以后才删除历史数据,否则不可以删除
if [ -e $back_filename.bak ];then
# 删除历史文件
rm -rf $del_backfile.bak
echo "database[$db_name] backup success! "
else
echo "database[$db_name] backup failed!"
fi
#/bin/bash
# 数据库用户名称
user=username
# 登录密码
passwd=your password
# 备份地址(一定是mssql的用户组)
back_path=/newdisk/sqlbak/
# 数据库名称
db_name=test
# 数据库的备份时间
back_time=`date +%Y%m%d_%H%M%S`
# 数据库备份的名称:{路径}{数据库名称}{时间}
back_filename=$back_path$db_name$back_time
# 需要删除的历史备份文件,保留15天内的数据库备份,由于每天可能会备份多次,这里需要使用通配符删除当天所有的数据库备份
del_time=`date -d "15 day ago" +"%Y%m%d_*"`
# 数据库备份的名称:{路径}{数据库名称}{时间}
del_backfile=$back_path$db_name$del_time
# 执行数据库备份
/opt/mssql-tools/bin/sqlcmd -S localhost -U $user -P $passwd -d master -Q "BACKUP DATABASE $db_name to disk='$back_filename.bak'"
# 将备份文件压缩
tar -zcf $back_filename.tar.gz $back_filename.bak
# 删除临时文件
rm -f $back_filename.bak
if [ -e $back_filename.tar.gz ];then
rm -rf $del_backfile*.gz
echo "database[multiverse] backup success! "
else
echo "database[multiverse] backup failed!"
fi
6、接下来就是给命令行添加crontab了,相关命令行如下:
# 查看状态
service crond status
# 编辑crontab
crontab -u mssql -e
# 查看当前定时任务
crontab -u mssql -l
# 查看crontab的日志
tail -f /var/log/cron
# 设置开机启动,在 /etc/rc.d/rc.local 脚本中加入启动crontab命令即可
# 启动crontab
systemctl start crond.service
# 重启crontab
systemctl restart crond.service
# 停止crontab
systemctl stop crond.service
# 重载
systemctl reload crond.service
7、crontab的内容我是这么写的,测试用,具体根据实际情况修改即可(这里有个小水坑,就是log.log的权限一定要是mssql)
*/1 * * * * /usr/bin/sh /datadisk/backup_mssql.sh >> /datadisk/sqlbak/log.log