在Linux环境下管理和操作SQL Server涉及多种命令行工具和脚本技术,这些工具可以帮助数据库管理员(DBA)和开发人员高效地完成安装、配置、监控和维护任务,以下将从安装配置、日常管理、性能监控、数据操作及自动化脚本等方面详细介绍相关命令和使用方法。

在Linux上安装SQL Server通常使用微软提供的官方脚本,需要下载Microsoft SQL Server Red Hat存储库配置文件,例如对于Red Hat Enterprise Linux或CentOS,可以使用命令curl https://packages.microsoft.com/config/rhel/8/mssql-server.repo | sudo tee /etc/yum.repos.d/mssql-server.repo
添加仓库,通过sudo yum install -y mssql-server
安装SQL Server服务,安装完成后运行sudo /opt/mssql/bin/sqlservr --install
初始化服务,并使用sudo systemctl start mssql-server.service
启动服务,安装SQL Server命令行工具(如sqlcmd)时,需添加微软的Ubuntu仓库(对于Ubuntu系统)或Red Hat仓库,然后执行sudo apt-get install mssql-tools
或sudo yum install -y mssql-tools
,安装后可通过echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
将工具添加到环境变量。
配置SQL Server时,sudo /opt/mssql/bin/mssql-conf
是核心工具,设置SA密码需运行sudo /opt/mssql/bin/mssql-conf set sa.YourStrong!Passw0rd
,其中密码需满足复杂度要求;修改TCP端口使用sudo /opt/mssql/bin/mssql-conf set network.tcpport 1433
;启用或禁止远程连接可通过sudo /opt/mssql/bin/mssql-conf set network.remoteaccess 1
或0
实现,配置完成后,需重启服务sudo systemctl restart mssql-server.service
使更改生效。
日常管理中,连接SQL Server主要通过sqlcmd和Azure Data Studio(GUI工具),sqlcmd的基本用法为sqlcmd -S localhost -U SA -P 'YourPassword'
,连接后可执行T-SQL语句,如创建数据库CREATE DATABASE MyDB;
,或退出QUIT
,服务管理方面,sudo systemctl start mssql-server
启动服务,sudo systemctl stop mssql-server
停止服务,sudo systemctl restart mssql-server
重启服务,sudo systemctl status mssql-server
查看服务状态,备份与恢复是重要任务,使用T-SQL命令可实现,例如完整备份BACKUP DATABASE MyDB TO DISK='/var/opt/mssql/backup/MyDB.bak' WITH INIT;
,恢复数据库RESTORE DATABASE MyDB FROM DISK='/var/opt/mssql/backup/MyDB.bak' WITH MOVE 'MyDB' TO '/var/opt/mssql/data/MyDB.mdf', MOVE 'MyDB_log' TO '/var/opt/mssql/data/MyDB_log.ldf';
。
性能监控是确保SQL Server稳定运行的关键,动态管理视图(DMV)提供了丰富的性能数据,例如通过查询SELECT * FROM sys.dm_os_performance_counters
获取计数器信息(如CPU使用率、内存占用),SELECT * FROM sys.dm_exec_requests
查看当前正在执行的请求,SELECT * FROM sys.dm_os_wait_stats
分析等待资源,Linux系统工具如top
、htop
、vmstat
可用于监控服务器整体资源,例如htop
实时显示CPU和内存使用情况,df -h
查看磁盘空间,日志文件位于/var/opt/mssql/log/
,可通过tail -f /var/opt/mssql/log/errorlog
实时查看错误日志。

数据操作和用户管理也是常见任务,创建用户并授权权限的T-SQL语句为CREATE LOGIN MyUser WITH PASSWORD='SecurePass!';
,CREATE USER MyUser FOR LOGIN MyUser;
,GRANT SELECT, INSERT ON MyTable TO MyUser;
,数据导入导出可使用bcp
命令行工具,例如导出数据bcp MyDB.dbo.MyTable out /tmp/MyTable.csv -c -S localhost -U SA -P 'YourPassword'
,导入数据bcp MyDB.dbo.MyTable in /tmp/MyTable.csv -c -S localhost -U SA -P 'YourPassword'
。
自动化脚本方面,结合Shell脚本和T-SQL可定期执行维护任务,创建备份脚本backup.sh
为#!/bin/bash /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'YourPassword' -Q "BACKUP DATABASE MyDB TO DISK='/var/opt/mssql/backup/MyDB_$(date +%Y%m%d).bak' WITH INIT;"
,然后赋予执行权限chmod +x backup.sh
并设置定时任务crontab -e
添加0 2 * * * /path/to/backup.sh
实现每天凌晨2点备份。
以下表格总结了常用命令及其功能:
命令类别 | 命令示例 | 功能描述 |
---|---|---|
安装SQL Server | curl https://packages.microsoft.com/config/rhel/8/mssql-server.repo | sudo tee /etc/yum.repos.d/mssql-server.repo |
添加Microsoft SQL Server仓库 |
sudo yum install -y mssql-server |
安装SQL Server服务 | |
安装工具 | sudo yum install -y mssql-tools |
安装SQL Server命令行工具(如sqlcmd、bcp) |
配置SQL Server | sudo /opt/mssql/bin/mssql-conf set sa.YourStrong!Passw0rd |
设置SA密码 |
sudo /opt/mssql/bin/mssql-conf set network.tcpport 1433 |
修改TCP端口 | |
连接数据库 | sqlcmd -S localhost -U SA -P 'YourPassword' |
使用sqlcmd连接本地SQL Server |
服务管理 | sudo systemctl start mssql-server |
启动SQL Server服务 |
sudo systemctl restart mssql-server |
重启SQL Server服务 | |
备份数据库 | BACKUP DATABASE MyDB TO DISK='/var/opt/mssql/backup/MyDB.bak' |
使用T-SQL执行数据库完整备份 |
性能监控 | SELECT * FROM sys.dm_os_performance_counters |
查询SQL Server性能计数器 |
htop |
Linux系统工具,实时监控CPU和内存 | |
用户管理 | CREATE LOGIN MyUser WITH PASSWORD='SecurePass!'; |
创建SQL Server登录用户 |
数据导入导出 | bcp MyDB.dbo.MyTable out /tmp/MyTable.csv -c -S localhost -U SA -P 'YourPassword' |
使用bcp工具导出数据到CSV文件 |
相关问答FAQs:

-
问题:在Linux上安装SQL Server时提示“依赖包缺失”,如何解决?
解答: 安装SQL Server前需确保系统满足依赖要求,例如Red Hat/CentOS系统需安装libicu
、openssl
、libcurl
等包,可通过sudo yum install -y libicu
、sudo yum install -y openssl
、sudo yum install -y libcurl
安装依赖,若仍有问题,可检查系统版本是否符合SQL Server支持列表(如RHEL 8、Ubuntu 20.04等),并确保仓库配置正确。 -
问题:如何定期清理SQL Server备份文件以避免磁盘空间不足?
解答: 可以编写Shell脚本结合find
命令删除旧备份文件,创建清理脚本cleanup_backups.sh
为#!/bin/bash find /var/opt/mssql/backup -name "*.bak" -mtime +7 -delete
(删除7天前的备份文件),赋予执行权限chmod +x cleanup_backups.sh
,并通过crontab -e
添加定时任务(如每天凌晨3点执行0 3 * * * /path/to/cleanup_backups.sh
),实现自动清理。