1,mariadb 版本: 10.2.23
2, 二进制安装 mariadb 的 shell 脚本
- #!/bin/bash
- id MySQL &>/dev/null
- if [ `echo $?` -ne 0 ];then
- userdel -r MySQL &>/dev/null
- useradd -r -u 336 -s /sbin/nologin -d /data/MySQL MySQL &>/dev/null
- else
- useradd -r -u 336 -s /sbin/nologin -d /data/MySQL MySQL &>/dev/null
- fi
- rpm -q libaio &>/dev/null
- [ `echo $?` -ne 0 ] && yum -y install libaio
- rpm -q expect &>/dev/null
- [ `echo $?` -ne 0 ] && yum -y install expect
- if [ -e mariadb-10.2.23-Linux-x86_64.tar.gz ];then
- #此文件可能会造成影响, 所以先清空
- > /etc/my.cnf
- tar xf mariadb-10.2.23-Linux-x86_64.tar.gz -C /usr/local/
- cd /usr/local/
- ln -s mariadb-10.2.23-Linux-x86_64/ MySQL
- chown -R root.root /usr/local/MySQL/
- echo 'PATH=/usr/local/mysql/bin:$PATH'>/etc/profile.d/MySQL.sh
- mkdir /data/MySQL -p
- chown MySQL.MySQL /data/MySQL/
- cd /usr/local/MySQL
- ./scripts/mysql_install_db --datadir=/data/MySQL --user=MySQL
- mkdir -p /etc/MySQL
- cp /usr/local/MySQL/support-files/my-huge.cnf /etc/MySQL/my.cnf
- #禁止主机名解析, 建议使用
- sed -ri '/^\[mysqld\]/askip_name_resolve = on' /etc/MySQL/my.cnf
- sed -ri '/^\[mysqld\]/adatadir=\/data\/mysql' /etc/MySQL/my.cnf
- cp /usr/local/MySQL/support-files/MySQL.server /etc/init.d/mysqld
- chkconfig --add mysqld
- service mysqld start
- expect <<EOF
- spawn mysql_secure_installation
- expect {
- "Enter current password for root" { send "\n";exp_continue }
- "Set root password" { send "\n";exp_continue }
- "New password" { send "123456\n";exp_continue }
- "Re-enter new password" { send "123456\n";exp_continue }
- "Remove anonymous users" { send "y\n";exp_continue }
- "Disallow root login remotely" { send "y\n";exp_continue }
- "Remove test database and access to it" { send "y\n";exp_continue }
- "Reload privilege tables now" { send "y\n" }
- }
- #expect "]#" { send "exit\n" }
- expect eof
- EOF
- mysqladmin -uroot -p123456 ping &>/dev/null
- [ `echo $?` -eq 0 ] && echo 'mysql is running !' || echo 'mysql is stopped'
- else
- echo -e "mariadb-10.2.23-linux-x86_64.tar.gz is not exist"
- exit
- fi
3, 实现多示例
1, 创建多实例对应的目录结构
- mkdir -p /MySQL/{3306,3307,3308}/{data,etc,socket,log,bin,pid}
- chown -R MySQL.MySQL /MySQL/
2, 创建多实例的数据库文件
- /usr/local/MySQL/scripts/mysql_install_db --datadir=/MySQL/3306/data/ --user=MySQL
- /usr/local/MySQL/scripts/mysql_install_db --datadir=/MySQL/3307/data/ --user=MySQL
- /usr/local/MySQL/scripts/mysql_install_db --datadir=/MySQL/3308/data/ --user=MySQL
3, 创建对应配置文件
- cp /etc/MySQL/my.cnf /MySQL/3306/etc/
- VIM /MySQL/3306/etc/my.cnf
- [mysqld]
port=3306 加一行
- datadir=/MySQL/3306/data
- socket=/MySQL/3306/socket/MySQL.sock
- [mysqld_safe]
- log-error=/MySQL/3306/log/mariadb.log
- pid-file=/MySQL/3306/pid/mariadb.pid
- #3307 和 3308 同步修改
- cp /MySQL/3306/etc/my.cnf /MySQL/3307/etc/my.cnf
/MySQL/3307/etc/my.cnf 修改
cp /MySQL/3306/etc/my.cnf /MySQL/3308/etc/my.cnf
/MySQL/3308/etc/my.cnf 修改
4, 准备各实例的启动脚本并添加执行权限
- vi /MySQL/{3306,3307,3308}/bin/mysqld
- cat /MySQL/3306/bin/mysqld
- #!/bin/bash
- port=3306
- mysql_user="root"
- mysql_pwd="123456"
- #cmd_path="/mysql/3306/bin"
- cmd_path="/usr/local/mariadb-10.2.23-linux-x86_64/bin"
- mysql_basedir="/mysql"
- mysql_sock="${mysql_basedir}/${port}/socket/mysql.sock"
- function_start_mysql()
- {
- if [ ! -e "$mysql_sock" ];then
- printf "Starting MySQL...\n"
- ${cmd_path}/mysqld_safe --defaults-file=${mysql_basedir}/${port}/etc/my.cnf &> /dev/null &
- else
- printf "MySQL is running...\n"
- exit
- fi
- }
- function_stop_mysql()
- {
- if [ ! -e "$mysql_sock" ];then
- printf "MySQL is stopped...\n"
- exit
- else
- printf "Stoping MySQL...\n"
- ${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown
- fi
- }
- function_restart_mysql()
- {
- printf "Restarting MySQL...\n"
- function_stop_mysql
- sleep 2
- function_start_mysql
- }
- case $1 in
- start)
- function_start_mysql
- ;;
- stop)
- function_stop_mysql
- ;;
- restart)
- function_restart_mysql
- ;;
- *)
- printf "Usage: ${mysql_basedir}/${port}/bin/mysqld {start|stop|restart}\n"
- esac
- #添加执行权限
- chmod +x /MySQL/{3306,3307,3308}/bin/mysqld
5, 启动服务并做安全加固 (如果不做安全加固, 则 stop 时的脚本有问题, 密码不正确)
- /MySQL/{3306,3307,3308}/bin/mysqld start
- #安全加固
- /usr/local/MySQL/bin/mysql_secure_installation -S /MySQL/{3306,3307,3308}/socket/MySQL.sock (输入的密码与启动脚本一致)
6, 测试连接
MySQL -uroot -p123456 -S /MySQL/{3306,3307,3308}/socket/MySQL.sock
来源: http://www.bubuko.com/infodetail-3040712.html