共计 2771 个字符,预计需要花费 7 分钟才能阅读完成。
在生产中有时候会遇到一台主机要运行多个 MySQL 服务器 —- 叫做多实例
下面演示多实例的安装
首先我们规划下
基于二进制安装
1、创建 mysql 用户
useradd -r -s /sbin/nologin -d /app/mysql -m mysql
#
#
2、解压下载的二进制 mariadb 包
tar xvf mariadb-10.2.16-linux-x86_64.tar.gz -C /usr/local/
#
#
3、创建软连接
cd /usr/local/
#
ln -s mariadb-10.2.16-linux-x86_64/ mysql
#
4、修改权限
chown -R root.mysql /usr/local/mysql/
#
#
5、环境变量(少了这步也可)
vim /etc/profile.d/mysql.sh
#
. /etc/profile.d/mysql.sh
#
如果你已经二进制安装了 mariadb 包,可以从以下开始
指定数据库位置并初始化数据库
1、创建规划图上的目录
mkdir /mysqldb/{3306,3307,3308}/{etc,bin,data,pid,socket,log} -pv
#
#
2、更改主目录 mysqldb 的属性
chown -R mysql.mysql /mysqldb/
#
3、3306 端口
cd /usr/local/mysql/
#
scripts/mysql_install_db –datadir=/mysqldb/3306/data –user=mysql
#
4、3307 端口
01
02 scripts/mysql_install_db –datadir=/mysqldb/3307/data –user=mysql
#
5、3308 端口
scripts/mysql_install_db –datadir=/mysqldb/3308/data –user=mysql
#
修改配置文件
1、复制配置文件
cp /etc/my.cnf /mysqldb/3306/etc/
#
2、编辑配置文件
vim /mysqldb/3306/etc/my.cnf
#
3、把上面的配置文件当模板传送给 3307、3308
cp /mysqldb/3306/etc/my.cnf /mysqldb/3307/etc/
cp /mysqldb/3306/etc/my.cnf /mysqldb/3308/etc/
#
4、更改 07、08 配置文件的端口
sed -i ‘s/3306/3307/g’ /mysqldb/3307/etc/my.cnf
sed -i ‘s/3306/3308/g’ /mysqldb/3308/etc/my.cnf
#
启动程序
1、把事先编写的启动脚本复制到 06、07、08 的 bin 目录下
cp /root/mysqld /mysqldb/3306/bin/
cp /root/mysqld /mysqldb/3307/bin/
cp /root/mysqld /mysqldb/3308/bin/
#
2、更改 7、8 的启动脚本进程号为自己的
vim /mysqldb/3307/bin/mysqld
#07 的改为 3307
vim /mysqldb/3308/bin/mysqld
#08 的改为 3308
3、给启动脚本加执行权限
chown +x /mysqldb/3306/bin/mysqld
chmod +x /mysqldb/3306/bin/mysqld
chmod +x /mysqldb/3307/bin/mysqld
chmod +x /mysqldb/3308/bin/mysqld
#
4、启动服务脚本
/mysqldb/3306/bin/mysqld start
#
/mysqldb/3307/bin/mysqld start
#
/mysqldb/3308/bin/mysqld start
5、ss -ntl 查看
数据库加固
1、给数据库 root 用户加密码
mysqladmin -S /mysqldb/3306/socket/mysql.sock password ‘CentOS’
mysqladmin -S /mysqldb/3307/socket/mysql.sock password ‘centos’
mysqladmin -S /mysqldb/3308/socket/mysql.sock password ‘centos’
2、进入数据库删除匿名登陆
mysql -S /mysqldb/3306/socket/mysql.sock -uroot -p
#
select user,host from mysql.user;
# 查看有哪些用户
delete from mysql.user where user=”;
# 删除匿名用户
OK
exit 重新进入,如果不行,就重启下服务
附加启动脚本代码
#!/bin/bash
port=3306
mysql_user=”root”
mysql_pwd=””
cmd_path=”/usr/local/bin”
mysql_basedir=”/mysqldb”
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
: