目的,在一个物理服务器上跑多个服务器

前提准备条件
一台系统centos 8.x主机
关闭SElinux
关闭防火墙
时间同步

(蜗牛想说:作为一个新人小白,做这个操作get到两个知识点就是:脚本最好手动敲,不要复制,记住了。不要复制,复制会让你怀疑人生,另外一个就是,遇到操作问题,不要纠结,立刻换一个方法测试,一种方法试了两遍还是不行就换,不然平添几根白发,伤脑筋)

第一步:yum -y install mariadb-server

个人建议这里直接yum -y install mariadb* 安装mariadb所有相关软件

centos 查看mariadb centos8 mariadb_centos


第二步:准备三个实例的目录

mkdir -pv /mysql/{3306,3307,3308}/{data,etc,socket,log,bin,pid}

centos 查看mariadb centos8 mariadb_linux_02


第三步:文件所有者权限改为mysql

chown -R mysql.mysql /mysql

centos 查看mariadb centos8 mariadb_centos 查看mariadb_03


第四步:生成数据库文件

mysql_install_db --user=mysql --datadir=/mysql/3306/data

mysql_install_db --user=mysql --datadir=/mysql/3307/data

mysql_install_db --user=mysql --datadir=/mysql/3308/data

centos 查看mariadb centos8 mariadb_linux_04


第五步:准备配置文件
 vim /mysql/3306/etc/my.cnf
 vim /mysql/3307/etc/my.cnf
 vim /mysql/3308/etc/my.cnf
脚本如下:
 [mysqld]
 port=3306
 datadir=/mysql/3306/data
 socket=/mysql/3306/socket/mysql.sock
 log-error=/mysql/3306/log/mysql.log
 pid-file=/mysql/3306/pid/mysql.pid

centos 查看mariadb centos8 mariadb_linux_05


而对于3307和3308 可以执行以下命令:

sed ‘s/3306/3307/’ /mysql/3306/etc/my.cnf > /mysql/3307/etc/my.cnf
 sed ‘s/3306/3308/’ /mysql/3306/etc/my.cnf > /mysql/3308/etc/my.cnf
第六步:准备启动脚本
 vim /mysql/3306/bin/mysqld (脚本建议手动输入,因为我就是手动输入才执行成功)
 而3307 和3308
一样可以用sed
sed ‘s/3306/3307/’ /mysql/3306/bin/mysqld > /mysql/3308/bin/mysqld
 sed ‘s/3307/3308/’ /mysql/3307/bin/mysqld > /mysql/3308/bin/mysqld脚本如下
 #!/bin/bash
 port=3307
 mysql_user=“root”
 mysql_pwd=“magedu”
 cmd_path="/usr/bin"
 mysql_basedir="/mysql"
 mysql_sock="{port}/socket/mysql.sock"function_start_mysql()
 {
 if [ ! -e “$mysql_sock” ];then
 printf “Starting MySQL…\n”
{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_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: {port}/bin/mysqld {start|stop|restart}\n” esac

第七步:准备后启动脚本

先增加一下修改权限, 不然一会提示没有权限操作:

chmod +x /mysql/3306/bin/mysqld

chmod +x /mysql/3307/bin/mysqld

chmod +x /mysql/3308/bin/mysqld

centos 查看mariadb centos8 mariadb_centos 查看mariadb_06


centos 查看mariadb centos8 mariadb_linux_07


再查看端口 ss -ntl 端口已经全部开启了

centos 查看mariadb centos8 mariadb_centos 查看mariadb_08


第八步:登录实例

两种登录方法

第一种:mysql -h127.0.0.1 -P3306

centos 查看mariadb centos8 mariadb_linux_09


确认连接的端口

centos 查看mariadb centos8 mariadb_运维_10


由于第一种登录方法用的是127.0.0.1会有一些限制,所以个人建议用第二种

第二种登录方法: mysql -uroot -S /mysql/3306/socket/mysql.sock

centos 查看mariadb centos8 mariadb_linux_11


查看默认四个数据库列表

centos 查看mariadb centos8 mariadb_ubuntu_12


创建一个新数据库
create database test3306

centos 查看mariadb centos8 mariadb_ubuntu_13


需要注意的是每个实例都有自己的数据库
mysql -uroot -S /mysql/3307/socket/mysql.sock

centos 查看mariadb centos8 mariadb_centos_14


centos 查看mariadb centos8 mariadb_linux_15


第九步:修改密码

mysqladmin -uroot -S /mysql/3306/socket/mysql.sock password ‘magedu’

mysqladmin -uroot -S /mysql/3307/socket/mysql.sock password ‘magedu’

mysqladmin -uroot -S /mysql/3308/socket/mysql.sock password ‘magedu’

设置密码为magedu后发现 之前的mysql -uroot -S /mysql/3306/socket/mysql.sock已经无法登录

centos 查看mariadb centos8 mariadb_ubuntu_16


要设置mysql -uroot -pmagedu -S /mysql/3306/socket/mysql.sock

centos 查看mariadb centos8 mariadb_运维_17


至此 数据库已经成功启动
设置三个实例开机自动启动

在vim /etc/rc.d/rc.local写入:

for i in {3306…3308};do /mysql/$i/bin/mysqld start;done

centos 查看mariadb centos8 mariadb_centos 查看mariadb_18


改完后 设置chmod

chmod +x /etc/rc.d/rc.local

centos 查看mariadb centos8 mariadb_centos_19


重启后查看端口

centos 查看mariadb centos8 mariadb_ubuntu_20


至此 设置完成