示例:Ubuntu 的无人参与 SQL Server 安装脚本

适用于: SQL Server - Linux

此示例 bash 脚本可在 Ubuntu 上安装 SQL Server,且无需交互式输入。 它提供数据库引擎、SQL Server 命令行工具和 SQL Server 代理的安装示例,并执行安装后步骤。 可以选择安装全文搜索并创建管理用户。

提示

如果不需要无人参与安装脚本,则安装 SQL Server 最快速的方法是遵循 Ubuntu 的快速入门。 有关其他设置信息,请参阅 Linux 上的 SQL Server 的安装指南

先决条件

  • 至少需要 2GB 内存才能运行 Linux 上的 SQL Server。
  • 文件系统必须是 XFS 或 EXT4 。 其他文件系统(如 BTRFS)均不受支持 。
  • 有关其他系统要求,请参阅 Linux 上的 SQL Server 的系统要求

示例脚本

此示例在 Ubuntu Server 20.04 上安装 SQL Server 2019 (15.x)。 如果要安装不同版本的 SQL Server 或 Ubuntu Server,请相应地更改 Microsoft 存储库路径。

将示例脚本保存到文件,然后对其进行自定义。 必须替换脚本中的变量值。 还可以将任何脚本变量设置为环境变量,前提是从脚本文件中删除它们。

如果 SQL Server 启动缓慢,则脚本可能会失败。 这是因为脚本以非零状态退出。 删除第一行上的 -e 开关可以解决此问题。

重要

SA_PASSWORD 环境变量已弃用。 请改用 MSSQL_SA_PASSWORD

#!/bin/bash -e

# Use the following variables to control your install:

# Password for the SA user (required)
MSSQL_SA_PASSWORD='<YourStrong!Passw0rd>'

# Product ID of the version of SQL Server you're installing
# Must be evaluation, developer, express, web, standard, enterprise, or your 25 digit product key
# Defaults to developer
MSSQL_PID='evaluation'

# Enable SQL Server Agent (recommended)
SQL_ENABLE_AGENT='y'

# Install SQL Server Full Text Search (optional)
# SQL_INSTALL_FULLTEXT='y'

# Create an additional user with sysadmin privileges (optional)
# SQL_INSTALL_USER='<Username>'
# SQL_INSTALL_USER_PASSWORD='<YourStrong!Passw0rd>'

if [ -z $MSSQL_SA_PASSWORD ]
then
  echo Environment variable MSSQL_SA_PASSWORD must be set for unattended install
  exit 1
fi

echo Adding Microsoft repositories...
curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
repoargs="$(curl https://packages.microsoft.com/config/ubuntu/20.04/mssql-server-2019.list)"
sudo add-apt-repository "${repoargs}"
repoargs="$(curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list)"
sudo add-apt-repository "${repoargs}"

echo Running apt-get update -y...
sudo apt-get update -y

echo Installing SQL Server...
sudo apt-get install -y mssql-server

echo Running mssql-conf setup...
sudo MSSQL_SA_PASSWORD=$MSSQL_SA_PASSWORD \
     MSSQL_PID=$MSSQL_PID \
     /opt/mssql/bin/mssql-conf -n setup accept-eula

echo Installing mssql-tools and unixODBC developer...
sudo ACCEPT_EULA=Y apt-get install -y mssql-tools unixodbc-dev

# Add SQL Server tools to the path by default:
echo Adding SQL Server tools to your path...
echo PATH="$PATH:/opt/mssql-tools/bin" >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc

# Optional Enable SQL Server Agent:
if [ ! -z $SQL_ENABLE_AGENT ]
then
  echo Enabling SQL Server Agent...
  sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true
fi

# Optional SQL Server Full Text Search installation:
if [ ! -z $SQL_INSTALL_FULLTEXT ]
then
    echo Installing SQL Server Full-Text Search...
    sudo apt-get install -y mssql-server-fts
fi

# Configure firewall to allow TCP port 1433:
echo Configuring UFW to allow traffic on port 1433...
sudo ufw allow 1433/tcp
sudo ufw reload

# Optional example of post-installation configuration.
# Trace flags 1204 and 1222 are for deadlock tracing.
# echo Setting trace flags...
# sudo /opt/mssql/bin/mssql-conf traceflag 1204 1222 on

# Restart SQL Server after installing:
echo Restarting SQL Server...
sudo systemctl restart mssql-server

# Connect to server and get the version:
counter=1
errstatus=1
while [ $counter -le 5 ] && [ $errstatus = 1 ]
do
  echo Waiting for SQL Server to start...
  sleep 3s
  /opt/mssql-tools/bin/sqlcmd \
    -S localhost \
    -U SA \
    -P $MSSQL_SA_PASSWORD \
    -Q "SELECT @@VERSION" 2>/dev/null
  errstatus=$?
  ((counter++))
done

# Display error if connection failed:
if [ $errstatus = 1 ]
then
  echo Cannot connect to SQL Server, installation aborted
  exit $errstatus
fi

# Optional new user creation:
if [ ! -z $SQL_INSTALL_USER ] && [ ! -z $SQL_INSTALL_USER_PASSWORD ]
then
  echo Creating user $SQL_INSTALL_USER
  /opt/mssql-tools/bin/sqlcmd \
    -S localhost \
    -U SA \
    -P $MSSQL_SA_PASSWORD \
    -Q "CREATE LOGIN [$SQL_INSTALL_USER] WITH PASSWORD=N'$SQL_INSTALL_USER_PASSWORD', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=ON, CHECK_POLICY=ON; ALTER SERVER ROLE [sysadmin] ADD MEMBER [$SQL_INSTALL_USER]"
fi

echo Done!

运行脚本

若要运行该脚本,请执行以下操作:

  1. 将示例粘贴到你最喜欢的文本编辑器中,并使用便于记忆的名称保存它,例如 install_sql.sh

  2. 自定义 MSSQL_SA_PASSWORDMSSQL_PID 和要更改的任何其他变量。

  3. 将脚本标记为可执行文件

    chmod +x install_sql.sh
    
  4. 运行脚本

    ./install_sql.sh
    

了解脚本

bash 脚本执行的第一件事是设置几个变量。 这些变量可以是脚本变量(例如本示例),也可以是环境变量。 SQL Server 安装需要变量 MSSQL_SA_PASSWORD。 其他是为脚本创建的自定义变量。 示例脚本执行以下步骤:

  1. 导入公共 Microsoft GPG 密钥。

  2. 注册用于 SQL Server 的 Microsoft 存储库和命令行工具。

  3. 更新本地存储库。

  4. 安装 SQL Server。

  5. 将 SQL Server 配置为 MSSQL_SA_PASSWORD 并自动接受最终用户许可协议。

  6. 自动接受 SQL Server 命令行工具的最终用户许可协议,安装这些工具,然后安装 unixodbc-dev 包。

  7. 为便于使用,请将 SQL Server 命令行工具添加到路径。

  8. 如果已设置 SQL_ENABLE_AGENT 变量的脚本,则默认启用 SQL Server 代理。

  9. 如果已设置 SQL_INSTALL_FULLTEXT 变量,则可以选择安装 SQL Server 全文搜索。

  10. 在系统防火墙上取消阻止 TCP 端口 1433,这是从另一个系统连接到 SQL Server 所必需的。

  11. (可选)设置跟踪标志以进行死锁跟踪(需要取消注释行)。

  12. SQL Server 现已安装,若要使其可操作,请重启该过程。

  13. 验证是否已正确安装 SQL Server,并隐藏所有错误消息。

  14. 如果同时设置 SQL_INSTALL_USERSQL_INSTALL_USER_PASSWORD,则将创建新的服务器管理用户。

无人参与安装

简化多个无人参与安装,并创建独立的 bash 脚本来设置适当的环境变量。 可删除该示例脚本使用的任何变量,并将其放入自己的 bash 脚本。

#!/bin/bash
export MSSQL_SA_PASSWORD='<YourStrong!Passw0rd>'
export MSSQL_PID='evaluation'
export SQL_ENABLE_AGENT='y'
export SQL_INSTALL_USER='<Username>'
export SQL_INSTALL_USER_PASSWORD='<YourStrong!Passw0rd>'

然后运行 bash 脚本,如下所示:

. ./my_script_name.sh