![MySQL的部署脚本 图片[1]-MySQL的部署脚本-不念博客](https://www.bunian.cn/wp-content/uploads/2022/12/image-48.png)
今天不念来一个MySQL的部署脚本。同样地,先给出部署文档步骤:
1)下载
cd /usr/localsudo curl -O https://cdn.mysql.com/Downloads/MySQL-8.0/mysql-8.0.30-linux-glibc2.12-x86_64.tar.xzcd /usr/local sudo curl -O https://cdn.mysql.com/Downloads/MySQL-8.0/mysql-8.0.30-linux-glibc2.12-x86_64.tar.xzcd /usr/local sudo curl -O https://cdn.mysql.com/Downloads/MySQL-8.0/mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz
2)解压
sudo tar Jxf mysql-8.0.30-linux-glibc2.12-x86_64.tar.xzsudo ln -s mysql-8.0.30-linux-glibc2.12-x86_64 mysqlsudo tar Jxf mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz sudo ln -s mysql-8.0.30-linux-glibc2.12-x86_64 mysqlsudo tar Jxf mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz sudo ln -s mysql-8.0.30-linux-glibc2.12-x86_64 mysql
3)创建用户
sudo useradd -s /sbin/nologin mysqlsudo useradd -s /sbin/nologin mysqlsudo useradd -s /sbin/nologin mysql
4)创建数据目录
sudo mkdir -p /data/mysqlsudo chown -R mysql:mysql /data/mysqlsudo mkdir -p /data/mysql sudo chown -R mysql:mysql /data/mysqlsudo mkdir -p /data/mysql sudo chown -R mysql:mysql /data/mysql
5)定义配置文件
sudo vi /etc/my.cnf #写入如下内容[mysql]port = 3306socket = /tmp/mysql.sock[mysqld]user = mysqlport = 3306basedir = /usr/local/mysqldatadir = /data/mysqlsocket = /tmp/mysql.sockpid-file = /data/mysql/mysqld.pidlog-error = /data/mysql/mysql.errsudo vi /etc/my.cnf #写入如下内容 [mysql] port = 3306 socket = /tmp/mysql.sock [mysqld] user = mysql port = 3306 basedir = /usr/local/mysql datadir = /data/mysql socket = /tmp/mysql.sock pid-file = /data/mysql/mysqld.pid log-error = /data/mysql/mysql.errsudo vi /etc/my.cnf #写入如下内容 [mysql] port = 3306 socket = /tmp/mysql.sock [mysqld] user = mysql port = 3306 basedir = /usr/local/mysql datadir = /data/mysql socket = /tmp/mysql.sock pid-file = /data/mysql/mysqld.pid log-error = /data/mysql/mysql.err
6)安装依赖
##Rocky / CentOSsudo yum install -y ncurses-compat-libs-6.1-9.20180224.el8.x86_64 libaio-devel## Ubuntusudo apt install libaio-dev libtinfo5##Rocky / CentOS sudo yum install -y ncurses-compat-libs-6.1-9.20180224.el8.x86_64 libaio-devel ## Ubuntu sudo apt install libaio-dev libtinfo5##Rocky / CentOS sudo yum install -y ncurses-compat-libs-6.1-9.20180224.el8.x86_64 libaio-devel ## Ubuntu sudo apt install libaio-dev libtinfo5
7)初始化
/usr/local/mysql/bin/mysqld --console --initialize-insecure --user=mysql ## initialize-insecure使用空密码/usr/local/mysql/bin/mysqld --console --initialize-insecure --user=mysql ## initialize-insecure使用空密码/usr/local/mysql/bin/mysqld --console --initialize-insecure --user=mysql ## initialize-insecure使用空密码
8)启动
sudo vi /usr/lib/systemd/system/mysqld.service #写如下内容[Unit]Description=MYSQL serverAfter=network.target[Install]WantedBy=multi-user.target[Service]Type=forkingTimeoutSec=0PermissionsStartOnly=trueExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --daemonize $OPTIONSExecReload=/bin/kill -HUP -$MAINPID #这里-HUP可以是改成-s HUP,就变成强制杀进程,有需要可以改,下面也一样ExecStop=/bin/kill -QUIT $MAINPID #-s QUIT是强制杀进程KillMode=processLimitNOFILE=65535Restart=on-failureRestartSec=10RestartPreventExitStatus=1PrivateTmp=false### endsudo systemctl daemon-reloadsudo systemctl enable mysqldsudo systemctl start mysqldsudo vi /usr/lib/systemd/system/mysqld.service #写如下内容 [Unit] Description=MYSQL server After=network.target [Install] WantedBy=multi-user.target [Service] Type=forking TimeoutSec=0 PermissionsStartOnly=true ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --daemonize $OPTIONS ExecReload=/bin/kill -HUP -$MAINPID #这里-HUP可以是改成-s HUP,就变成强制杀进程,有需要可以改,下面也一样 ExecStop=/bin/kill -QUIT $MAINPID #-s QUIT是强制杀进程 KillMode=process LimitNOFILE=65535 Restart=on-failure RestartSec=10 RestartPreventExitStatus=1 PrivateTmp=false ### end sudo systemctl daemon-reload sudo systemctl enable mysqld sudo systemctl start mysqldsudo vi /usr/lib/systemd/system/mysqld.service #写如下内容 [Unit] Description=MYSQL server After=network.target [Install] WantedBy=multi-user.target [Service] Type=forking TimeoutSec=0 PermissionsStartOnly=true ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --daemonize $OPTIONS ExecReload=/bin/kill -HUP -$MAINPID #这里-HUP可以是改成-s HUP,就变成强制杀进程,有需要可以改,下面也一样 ExecStop=/bin/kill -QUIT $MAINPID #-s QUIT是强制杀进程 KillMode=process LimitNOFILE=65535 Restart=on-failure RestartSec=10 RestartPreventExitStatus=1 PrivateTmp=false ### end sudo systemctl daemon-reload sudo systemctl enable mysqld sudo systemctl start mysqld
9)配置环境变量
sudo vi /etc/profile #最后面增加下面一行内容export PATH=$PATH:/usr/local/mysql/bin## 然后执行下面命令,使其生效sudo source /etc/profilesudo vi /etc/profile #最后面增加下面一行内容 export PATH=$PATH:/usr/local/mysql/bin ## 然后执行下面命令,使其生效 sudo source /etc/profilesudo vi /etc/profile #最后面增加下面一行内容 export PATH=$PATH:/usr/local/mysql/bin ## 然后执行下面命令,使其生效 sudo source /etc/profile
10)设置密码
mysqladmin -uroot password 'your_new_passwd'mysqladmin -uroot password 'your_new_passwd'mysqladmin -uroot password 'your_new_passwd'
将上面步骤写成脚本:
#!/bin/bash### 设置变量 ###mysql_url="https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz"mysql_base_dir="/usr/local/mysql"mysql_data_dir="/data/mysql"mysql_root_pwd="aminglinux.Com"mysql_rep_pwd="Aminglinux123"##########################ck_ok(){if [ $? -ne 0 ]thenecho "$1 error."exit 1fi}download_mysql(){##下载前,先判断当前目录下是否已经下载过cd /usr/localif [ -f mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz ]thenecho "当前目录已经存在mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz"echo "检测md5"mysql_md5=`md5sum mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz|awk '{print $1}'`if [ ${mysql_md5} == "2469b1ae79e98110277d9b5bee301135" ]thenreturn 0elsesudo /bin/mv mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz.oldfifisudo wget ${mysql_url}ck_ok "下载mysql"}install_mysql(){cd /usr/localecho "解压mysql"sudo tar Jxf mysql-8.0.30-linux-glibc2.12-x86_64.tar.xzck_ok "解压mysql"if [ -d ${mysql_base_dir} ]thenecho "${mysql_base_dir}已经存在,挪走"sudo /bin/mv ${mysql_base_dir} ${mysql_master_base_dir}-`date +%s`fisudo mv mysql-8.0.30-linux-glibc2.12-x86_64 mysqlif id mysql &>/dev/nullthenecho "系统已经存在mysql用户,跳过创建"elseecho "创建mysql用户"sudo useradd -s /sbin/nologin mysqlfiif [ -d ${mysql_data_dir} ]thenecho "${mysql_data_dir}已经存在,挪走"sudo /bin/mv ${mysql_data_dir} ${mysql_data_dir}-`date +%s`fiecho "创建mysql datadir"sudo mkdir -p ${mysql_data_dir}sudo chown -R mysql ${mysql_data_dir}if [ -f ${mysql_base_dir}/my.cnf ]thenecho "master配置文件已经存在,删除"sudo rm -f ${mysql_base_dir}/my.cnffiecho "创建master配置文件my.cnf"cat > /tmp/my.cnf <<EOF[mysqld]user = mysqlport = 3306server_id = 1basedir = ${mysql_base_dir}datadir = ${mysql_data_dir}socket = /tmp/mysql.sockpid-file = ${mysql_data_dir}/mysqld.pidlog-error = ${mysql_data_dir}/mysql.errEOFsudo /bin/mv /tmp/my.cnf ${mysql_base_dir}/my.cnfecho "安装依赖"sudo yum install -y ncurses-compat-libs-6.1-9.20180224.el8.x86_64 libaio-develecho "初始化"sudo ${mysql_base_dir}/bin/mysqld --console --datadir=${mysql_data_dir} --initialize-insecure --user=mysqlck_ok "初始化"if [ -f /usr/lib/systemd/system/mysqld.service ]thenecho "mysql服务管理脚本已经存在,挪走"sudo /bin/mv /usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/mysqld.service-`date +%s`fiecho "创建服务启动脚本"cat > /tmp/mysqld.service <<EOF[Unit]Description=MYSQL serverAfter=network.target[Install]WantedBy=multi-user.target[Service]Type=forkingTimeoutSec=0PermissionsStartOnly=trueExecStart=${mysql_base_dir}/bin/mysqld --defaults-file=${mysql_base_dir}/my.cnf --daemonize $OPTIONSExecReload=/bin/kill -HUP -$MAINPIDExecStop=/bin/kill -QUIT $MAINPIDKillMode=processLimitNOFILE=65535Restart=on-failureRestartSec=10RestartPreventExitStatus=1PrivateTmp=falseEOFsudo /bin/mv /tmp/mysqld.service /usr/lib/systemd/system/mysqld.servicesudo systemctl unmask mysqldsudo systemctl daemon-reloadsudo systemctl enable mysqldecho "启动mysql"sudo systemctl start mysqldck_ok "启动mysql"echo "设置mysql密码"${mysql_base_dir}/bin/mysqladmin -S/tmp/mysql.sock -uroot password "${mysql_root_pwd}"ck_ok "设置mysql密码"}main(){download_mysqlinstall_mysql}main#!/bin/bash ### 设置变量 ### mysql_url="https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz" mysql_base_dir="/usr/local/mysql" mysql_data_dir="/data/mysql" mysql_root_pwd="aminglinux.Com" mysql_rep_pwd="Aminglinux123" ########################## ck_ok() { if [ $? -ne 0 ] then echo "$1 error." exit 1 fi } download_mysql() { ##下载前,先判断当前目录下是否已经下载过 cd /usr/local if [ -f mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz ] then echo "当前目录已经存在mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz" echo "检测md5" mysql_md5=`md5sum mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz|awk '{print $1}'` if [ ${mysql_md5} == "2469b1ae79e98110277d9b5bee301135" ] then return 0 else sudo /bin/mv mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz.old fi fi sudo wget ${mysql_url} ck_ok "下载mysql" } install_mysql() { cd /usr/local echo "解压mysql" sudo tar Jxf mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz ck_ok "解压mysql" if [ -d ${mysql_base_dir} ] then echo "${mysql_base_dir}已经存在,挪走" sudo /bin/mv ${mysql_base_dir} ${mysql_master_base_dir}-`date +%s` fi sudo mv mysql-8.0.30-linux-glibc2.12-x86_64 mysql if id mysql &>/dev/null then echo "系统已经存在mysql用户,跳过创建" else echo "创建mysql用户" sudo useradd -s /sbin/nologin mysql fi if [ -d ${mysql_data_dir} ] then echo "${mysql_data_dir}已经存在,挪走" sudo /bin/mv ${mysql_data_dir} ${mysql_data_dir}-`date +%s` fi echo "创建mysql datadir" sudo mkdir -p ${mysql_data_dir} sudo chown -R mysql ${mysql_data_dir} if [ -f ${mysql_base_dir}/my.cnf ] then echo "master配置文件已经存在,删除" sudo rm -f ${mysql_base_dir}/my.cnf fi echo "创建master配置文件my.cnf" cat > /tmp/my.cnf <<EOF [mysqld] user = mysql port = 3306 server_id = 1 basedir = ${mysql_base_dir} datadir = ${mysql_data_dir} socket = /tmp/mysql.sock pid-file = ${mysql_data_dir}/mysqld.pid log-error = ${mysql_data_dir}/mysql.err EOF sudo /bin/mv /tmp/my.cnf ${mysql_base_dir}/my.cnf echo "安装依赖" sudo yum install -y ncurses-compat-libs-6.1-9.20180224.el8.x86_64 libaio-devel echo "初始化" sudo ${mysql_base_dir}/bin/mysqld --console --datadir=${mysql_data_dir} --initialize-insecure --user=mysql ck_ok "初始化" if [ -f /usr/lib/systemd/system/mysqld.service ] then echo "mysql服务管理脚本已经存在,挪走" sudo /bin/mv /usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/mysqld.service-`date +%s` fi echo "创建服务启动脚本" cat > /tmp/mysqld.service <<EOF [Unit] Description=MYSQL server After=network.target [Install] WantedBy=multi-user.target [Service] Type=forking TimeoutSec=0 PermissionsStartOnly=true ExecStart=${mysql_base_dir}/bin/mysqld --defaults-file=${mysql_base_dir}/my.cnf --daemonize $OPTIONS ExecReload=/bin/kill -HUP -$MAINPID ExecStop=/bin/kill -QUIT $MAINPID KillMode=process LimitNOFILE=65535 Restart=on-failure RestartSec=10 RestartPreventExitStatus=1 PrivateTmp=false EOF sudo /bin/mv /tmp/mysqld.service /usr/lib/systemd/system/mysqld.service sudo systemctl unmask mysqld sudo systemctl daemon-reload sudo systemctl enable mysqld echo "启动mysql" sudo systemctl start mysqld ck_ok "启动mysql" echo "设置mysql密码" ${mysql_base_dir}/bin/mysqladmin -S/tmp/mysql.sock -uroot password "${mysql_root_pwd}" ck_ok "设置mysql密码" } main() { download_mysql install_mysql } main#!/bin/bash ### 设置变量 ### mysql_url="https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz" mysql_base_dir="/usr/local/mysql" mysql_data_dir="/data/mysql" mysql_root_pwd="aminglinux.Com" mysql_rep_pwd="Aminglinux123" ########################## ck_ok() { if [ $? -ne 0 ] then echo "$1 error." exit 1 fi } download_mysql() { ##下载前,先判断当前目录下是否已经下载过 cd /usr/local if [ -f mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz ] then echo "当前目录已经存在mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz" echo "检测md5" mysql_md5=`md5sum mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz|awk '{print $1}'` if [ ${mysql_md5} == "2469b1ae79e98110277d9b5bee301135" ] then return 0 else sudo /bin/mv mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz.old fi fi sudo wget ${mysql_url} ck_ok "下载mysql" } install_mysql() { cd /usr/local echo "解压mysql" sudo tar Jxf mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz ck_ok "解压mysql" if [ -d ${mysql_base_dir} ] then echo "${mysql_base_dir}已经存在,挪走" sudo /bin/mv ${mysql_base_dir} ${mysql_master_base_dir}-`date +%s` fi sudo mv mysql-8.0.30-linux-glibc2.12-x86_64 mysql if id mysql &>/dev/null then echo "系统已经存在mysql用户,跳过创建" else echo "创建mysql用户" sudo useradd -s /sbin/nologin mysql fi if [ -d ${mysql_data_dir} ] then echo "${mysql_data_dir}已经存在,挪走" sudo /bin/mv ${mysql_data_dir} ${mysql_data_dir}-`date +%s` fi echo "创建mysql datadir" sudo mkdir -p ${mysql_data_dir} sudo chown -R mysql ${mysql_data_dir} if [ -f ${mysql_base_dir}/my.cnf ] then echo "master配置文件已经存在,删除" sudo rm -f ${mysql_base_dir}/my.cnf fi echo "创建master配置文件my.cnf" cat > /tmp/my.cnf <<EOF [mysqld] user = mysql port = 3306 server_id = 1 basedir = ${mysql_base_dir} datadir = ${mysql_data_dir} socket = /tmp/mysql.sock pid-file = ${mysql_data_dir}/mysqld.pid log-error = ${mysql_data_dir}/mysql.err EOF sudo /bin/mv /tmp/my.cnf ${mysql_base_dir}/my.cnf echo "安装依赖" sudo yum install -y ncurses-compat-libs-6.1-9.20180224.el8.x86_64 libaio-devel echo "初始化" sudo ${mysql_base_dir}/bin/mysqld --console --datadir=${mysql_data_dir} --initialize-insecure --user=mysql ck_ok "初始化" if [ -f /usr/lib/systemd/system/mysqld.service ] then echo "mysql服务管理脚本已经存在,挪走" sudo /bin/mv /usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/mysqld.service-`date +%s` fi echo "创建服务启动脚本" cat > /tmp/mysqld.service <<EOF [Unit] Description=MYSQL server After=network.target [Install] WantedBy=multi-user.target [Service] Type=forking TimeoutSec=0 PermissionsStartOnly=true ExecStart=${mysql_base_dir}/bin/mysqld --defaults-file=${mysql_base_dir}/my.cnf --daemonize $OPTIONS ExecReload=/bin/kill -HUP -$MAINPID ExecStop=/bin/kill -QUIT $MAINPID KillMode=process LimitNOFILE=65535 Restart=on-failure RestartSec=10 RestartPreventExitStatus=1 PrivateTmp=false EOF sudo /bin/mv /tmp/mysqld.service /usr/lib/systemd/system/mysqld.service sudo systemctl unmask mysqld sudo systemctl daemon-reload sudo systemctl enable mysqld echo "启动mysql" sudo systemctl start mysqld ck_ok "启动mysql" echo "设置mysql密码" ${mysql_base_dir}/bin/mysqladmin -S/tmp/mysql.sock -uroot password "${mysql_root_pwd}" ck_ok "设置mysql密码" } main() { download_mysql install_mysql } main
写脚本最重要的是思路,有了思路,有了命令,还难么?
当然,我们还需要考虑到脚本可能出现的异常,比如下载的包不对,很有可能导致后面的解压出错。
所以就需要先判断下载的包到底对不对。
不过,这个能力就需要一点一点积累了,多写多练肯定是没错的。
© 版权声明
本站文章由不念博客原创,未经允许严禁转载!
THE END