이 글에서는 업무 효율성을 높이기 위해 Shell
脚本语言的方式自动化安装MySQL
데이터베이스를 주로 사용합니다.
大致思路及步骤如下:
第一步:首先,自定义MySQL
数据库的安装目录、MySQL
数据存储目录和MySQL
数据库超级用户的密码变量。
#!/bin/bash binDir='/usr/local/mysql' # MySQL 数据库的安装目录 dataDir='/bigdata/mysql/mysqldata'# MySQL 数据存储目录 mysqlPassword='1q!2w@3e#' # MySQL 数据库超级用户的密码
第二步:获取当前脚本所在的目录,并将该目录赋值给变量BASE
。
然后,使用cd
命令切换到这个目录。通常用于确保脚本在执行时位于正确的工作目录。
BASE=$(cd `dirname $0` && pwd) cd $BASE
第三步:检查操作系统的内核版本是否为el7
,如果不是,则输出错误信息并退出安装。
release=$(uname -r |awk -F'.' '{print $4}') if [ "X${release}" != 'Xel7' ];then echo "[ERROR] 操作系统版本: ${release}, 非el7, 退出安装" exit 1 fi
release=$(uname -r |awk -F'.' '{print $4}')
:获取当前操作系统的内核版本,并提取出版本号中的第四个字段,然后将其赋值给变量release
。if
和then
来检查变量release
是否等于el7
。如果不等于el7
,则输出错误信息并退出安装。[ "X${release}" != 'Xel7' ]
:是一个条件判断,X
是为了防止变量为空时出现错误。如果条件成立,则执行echo
输出错误信息,然后使用exit 1
退出安装。第四步:检查${binDir}
和${dataDir}
两个变量中是否包含/mysql
关键字。如果这两个变量中没有包含/mysql
,则会输出相应的错误信息并退出脚本。
keyword='/mysql' if ! echo "${binDir}" |grep ${keyword} &>/dev/null; then echo "[ERROR] ${binDir}配置错误, 没有包含${keyword}" exit 1 fi if ! echo "${dataDir}" |grep ${keyword} &>/dev/null; then echo "[ERROR] ${dataDir}配置错误, 没有包含${keyword}" exit 1 fi
第五步:停止MySQL
进程并清理指定目录。
echo "[INFO] 停止mysql进程, 并清理目录: ${binDir}, ${dataDir}..." service mysql stop &>/dev/null test -d ${binDir} && rm -fr ${binDir} test -d ${dataDir} && rm -fr ${dataDir}
echo "[INFO] 停止mysql进程, 并清理目录: ${binDir}, ${dataDir}..."
:使用echo
命令打印一条信息,其中${binDir}
和${dataDir}
是变量,会被替换为实际的目录路径。service mysql stop &>/dev/null
:使用service
命令来停止MySQL
服务。&>/dev/null
部分是将命令的输出重定向到/dev/null
,即丢弃输出,这样将不会在终端上显示任何信息。test -d ${binDir} && rm -fr ${binDir}
:使用test -d
检查${binDir}
是否是一个目录,如果是,则执行rm -fr ${binDir}
来递归地删除${binDir}
目录及其内容。test -d ${dataDir} && rm -fr ${dataDir}
:使用test -d
检查${dataDir}
是否是一个目录,如果是,则执行rm -fr ${dataDir}
来递归地删除${dataDir}
目录及其内容。第六步:在命令行中输出日志信息:[INFO] 开始解压mysql安装包, 请等待…,然后执行解压缩命令tar zxf mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz
,接着将解压后的文件夹移动到自定义变量${binDir}
的目录中。
echo "[INFO] 开始解压mysql安装包, 请等待..." tar zxf mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz && mv mysql-5.7.25-linux-glibc2.12-x86_64 ${binDir}
第七步:创建mysql
的组和用户。
echo "[INFO] 创建mysql组与用户..." groupadd mysql 2>/dev/null useradd -r -g mysql mysql 2>/dev/null
groupadd mysql 2>/dev/null
:使用groupadd
命令创建一个名为mysql
的组。2>/dev/null
的作用是将错误输出重定向到/dev/null
,这样如果组已经存在,就不会显示错误信息。useradd -r -g mysql mysql 2>/dev/null
:使用useradd
命令创建一个名为mysql
的用户,并将其加入到mysql
组中。-r
:表示创建一个系统用户,-g mysql
:表示将用户添加到mysql
组。同样,2>/dev/null
的作用是将错误输出重定向到/dev/null
,以防止显示错误信息。第八步:创建MySQL
数据目录,并将目录下的所有文件和子目录的所有者和所属组设置为:
echo "[INFO] 创建mysql数据目录..." mkdir -p${dataDir} && chown -R mysql:mysql ${dataDir} chown -R mysql:mysql ${binDir}
echo "[INFO] 创建mysql数据目录..."
:输出一条信息,提示用户正在创建MySQL
数据目录。mkdir -p ${dataDir} && chown -R mysql:mysql ${dataDir}
:首先,mkdir -p ${dataDir}
用于创建目录${dataDir}
,-p
:表示如果目录不存在,则进行创建。&&
是逻辑与操作符,只有在前一个命令成功执行后才执行后一个命令。所以,如果目录创建成功,才会执行chown -R mysql:mysql ${dataDir}
命令将以递归的方式(包括子目录和文件)将${dataDir}
目录下的所有文件和子目录的所有者和所属组设置为mysql:mysql
。第九步:创建MySQL
的配置文件/etc/my.cnf
。该配置文件包含了MySQL
服务器mysqld
和客户端client
的配置信息。
echo "[INFO] 创建mysql配置文件:/etc/my.cnf ..." cat >/etc/my.cnf <<EOF [mysqld] character-set-server=utf8 server-id = 1 lower_case_table_names=1 basedir=${binDir} datadir=${dataDir} user=mysql symbolic-links=0 federated sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION [client] default-character-set=utf8 [mysqld_safe] default-storage-engine=INNODB character-set-server=utf8 collation-server=utf8_general_ci EOF
[mysqld]
是MySQL
服务器的配置部分,具体配置参数选项如下:
character-set-server=utf8
:服务器的字符集为 UTF-8server-id = 1
:服务器的唯一ID为 1lower_case_table_names=1
:表名大小写不敏感basedir=${binDir}
:MySQL 的安装目录datadir=${dataDir}
:MySQL 的数据目录user=mysql
:MySQL 服务的运行用户symbolic-links=0
:禁用符号链接federated
:启用 Federated 存储引擎sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
:设置 SQL 模式[client]
是MySQL
客户端的配置部分,具体配置参数选项如下:
default-character-set=utf8
:客户端的默认字符集为 UTF-8[mysqld_safe]
是MySQL
安全模式的配置部分,具体配置参数选项如下:
default-storage-engine=INNODB
:默认的存储引擎为InnoDBcharacter-set-server=utf8
:服务器的字符集为 UTF-8collation-server=utf8_general_ci
:服务器的排序规则为 utf8_general_ci第十步:初始化MySQL
数据库
# 初始化mysql echo "[INFO] 初始化mysql..." ${binDir}/bin/mysqld --defaults-file=/etc/my.cnf --basedir=${binDir} --datadir=${dataDir} --user=mysql --initialize-insecure
该命令会执行mysqld
可执行文件,并使用指定的配置文件、安装目录、数据目录和用户来初始化MySQL
数据库。
--initialize-insecure
:以不安全的方式初始化数据库,会创建一个空密码的root
用户。第十一步:添加开机启动
echo "[INFO] 添加mysql服务, 以及开机启动..." ln -sf ${binDir}/bin/mysql /usr/local/bin/mysql ln -sf ${binDir}/support-files/mysql.server /etc/init.d/mysql /usr/bin/systemctl enable mysql
ln -sf ${binDir}/bin/mysql /usr/local/bin/mysql
:创建一个符号链接,将${binDir}/bin/mysql
链接到/usr/local/bin/mysql
。-s
:表示创建一个符号链接,-f
:表示如果/usr/local/bin/mysql
已经存在,则先删除。${binDir}/bin/mysql
是源文件,/usr/local/bin/mysql
是链接文件。ln -sf ${binDir}/support-files/mysql.server /etc/init.d/mysql
:创建一个符号链接,将${binDir}/support-files/mysql.server
链接到/etc/init.d/mysql
。-s
选项表示创建一个符号链接,-f
选项表示如果/etc/init.d/mysql
已经存在,则先删除。${binDir}/support-files/mysql.server
是源文件,/etc/init.d/mysql
是链接文件。/usr/bin/systemctl enable mysql
:使用systemctl
命令启用mysql
服务,使其在系统启动时自启动。第十二步:启动 MySQL 服务
echo "[INFO] 启动mysql服务..." service mysql start if [ $? -ne 0 ];then echo "[ERROR] mysql启动失败, 查看mysql日志: ${dataDir}下的.err文件" exit 2 fi
echo "[INFO] 启动mysql服务..."
:用于在控制台输出一条信息,提示用户正在启动MySQL
服务。service mysql start
:启动MySQL
服务。if [ $? -ne 0 ];then
:条件语句,用于检查上一条命令的执行结果。$?
:是一个特殊变量,用于获取上一个命令的退出状态。如果上一个命令执行成功,其退出状态为0
,否则为非0
。echo "[ERROR] mysql启动失败, 查看mysql日志: ${dataDir}下的.err文件"
:MySQL
服务启动失败时,将输出一条错误信息,并提示查看MySQL
日志文件。exit 2
:如果MySQL
服务启动失败,将以退出码2
结束执行,表示出现了错误。第十三步:在 MySQL 数据库中创建用户、数据库和授予权限
echo "[INFO] 修改mysql用户密码..." ${binDir}/bin/mysql -uroot <<EOF SET PASSWORD = PASSWORD('${mysqlPassword}'); ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER; create database hive; create database ranger; create user 'hive' identified by '1q!2w@3e#'; grant all on *.* to hive@"%" identified by "1q!2w@3e#"; grant all on *.* to root@'%' identified by'1q!2w@3e#'; UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root'; FLUSH PRIVILEGES; EOF echo "[INFO] 安装完成" exit 0
${binDir}/bin/mysql -uroot :在命令行中执行<code>MySQL
客户端并使用root
用户登录的命令。SET PASSWORD = PASSWORD('${mysqlPassword}');
:设置MySQL
用户密码。ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
:将root
用户的密码过期策略设置为永不过期。create database hive;
:创建名为hive
的数据库。create database ranger;
:创建名为ranger
的数据库。create user 'hive' identified by '1q!2w@3e#';
:创建一个名为hive
的用户,并设置其密码为:1q!2w@3e#
。grant all on *.* to hive@"%" identified by "1q!2w@3e#";
:授予用户hive
对所有数据库的所有权限,并使用指定的密码进行身份验证。grant all on *.* to root@'%' identified by'1q!2w@3e#';
:授予root
用户对所有数据库的所有权限,并使用指定的密码进行身份验证。UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
:更新MySQL
用户表中root
用户的权限,将Grant_priv
和Super_priv
设置为:Y
,表示拥有所有权限。FLUSH PRIVILEGES;
:刷新MySQL
的权限,使其配置生效。最后,代码中的 echo
命令用于输出一些提示信息,提示用户MySQL
安装完成。
위 내용은 MySQL 데이터베이스 설치를 자동화하는 쉘 스크립트의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!