|NO.Z.00011|——————————|Applications|——|mysql&mariadb&多实例|
一、概述关系型数据库常见组件:
### --- 概述关系型数据库常见组件:
~~~ 数据库:database
~~~ 表:table
~~~ 行:row
~~~ 列:column
~~~ 索引:index
~~~ 视图:view
~~~ 用户:user
~~~ 权限privilege
~~~ 存储过程:procedure,无返回值
~~~ 存储函数:function,有返回值
~~~ 触发器:trigger
~~~ 时间调度器:event scheduler,任务计划
二、创建多实例:
### --- 设计规划;环境检查:
~~~ 在一个服务器上跑多个实例的话需要用到多个端口号;我们以端口号定义实例的名称。
~~~ 以yum安装环境实现多实例。
### --- 环境说明:
~~~ centos版本:7.6.1810
~~~ mariadb版本:10.2.35
### --- 多实例规划:(以端口号来区分)
~~~ mysql-3306
~~~ mysql-3307
~~~ mysql-3308
### --- 实现多实例的官方工具:/usr/bin/mysqld_multi:
~~~ 可以配置多实例,缺点是只能针对同一个版本实现多实例;依赖于当前包的版本。
一、创建多实例:
1、部署mariadb 10.2.35版本环境的多实例:安装本机mariadb准备各自的目录创建用户生成各自的数据库文件
### --- 安装mariadb 10.2.35,安装完已经生成一个实例;
[root@localhost ~]# yum install mariadb-server -y // 安装本机的mariadb数据库程序
[root@localhost ~]# rpm -ql mariadb-server |grep multi // 多实例工具
/usr/bin/mysqld_multi
/usr/share/man/man1/mysqld_multi.1.gz
### --- 规划目录:创建多实例文件夹,并把它所需要的文件夹规划在当前目录下:
[root@localhost ~]# mkdir /mysqldb/{3306,3307,3308}/{etc,socket,pid,log,data,bin} -pv
[root@localhost ~]# tree /mysqldb/
/mysqldb/
├── 3306 // 3306实例文件夹
│ ├── data // 数据库数据存放目录
│ ├── etc // 配置文件存放目录
│ ├── log // 日志文件存放目录
│ ├── pid // pid文件存放目录
│ └── socket // socket文件存放目录
└── bin // 启动脚本存放目录
├── 3307 // 3307实例文件夹
│ ├── data
│ ├── etc
│ ├── log
│ ├── pid
│ └── socket
└── bin
└── 3308 // 3308实例文件夹
├── data
├── etc
├── log
├── pid
└── socket
└── bin
### --- 创建mysql用户:
[root@localhost ~]# useradd -r -s /bin/nologin -m -d /var/lib/mysql mysql //创建mysql用户
[root@localhost ~]# getent passwd mysql
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
[root@localhost ~]# chown -R mysql.mysql /mysqldb/ //给mysqldb文件夹授予mysql用户的所有权限
### --- 生成多实例的数据库(生成三个数据库文件,各自放在各自的文件夹里)
MariaDB [(none)]> show variables like '%basedir%'; // 在本机mysql数据库中查找变量basedir路径:
| basedir | /usr | /basedir路径默认指定到/usr下
[root@localhost ~]# mysql_install_db --datadir=/mysqldb/3306/data --user=mysql --basedir=/usr/ //生成数据库; --datadir指定生成的目录地址;--basedir指定basedir路径,需要在mysql数据库中查找;
[root@localhost ~]# mysql_install_db --datadir=/mysqldb/3307/data --user=mysql --basedir=/usr/
[root@localhost ~]# mysql_install_db --datadir=/mysqldb/3308/data --user=mysql --basedir=/usr/
二、准备配置文件
### --- 把本机的配置文件,cp到各自配置文件目录之下:
[root@localhost ~]# cp /etc/my.cnf /mysqldb/3306/etc/
[root@localhost ~]# cp /etc/my.cnf /mysqldb/3307/etc/
[root@localhost ~]# cp /etc/my.cnf /mysqldb/3308/etc/
### --- vim下全部替换3306为3307(vim下批量替换字段)
~~~ %s/3306/3307
[root@localhost ~]# vim /mysqldb/3306/etc/my.cnf
port=3306 // 端口号 //3306可以不加端口号,其它的必须加
datadir=/mysqldb/3306/data // 数据库文件地址
socket=/mysqldb/3306/socket/mysql.sock // mysql.sock文件地址
log-error=/mysqldb/3306/log/mariadb.log // 日志文件地址
pid-file=/mysqldb/3306/pid/mariadb.pid // pid文件地址
# !includedir /etc/my.cnf.d // 注销、重新配置地址
[root@localhost ~]# vim /mysqldb/3306/etc/my.cnf
port=3307 // 端口号
datadir=/mysqldb/3307/data // 数据库文件地址
socket=/mysqldb/3307/socket/mysql.sock // mysql.sock文件地址
log-error=/mysqldb/3307/log/mariadb.log // 日志文件地址
pid-file=/mysqldb/3307/pid/mariadb.pid // pid文件地址
# !includedir /etc/my.cnf.d // 注销
[root@localhost ~]# vim /mysqldb/3308/etc/my.cnf
port=3308 // 端口号
datadir=/mysqldb/3308/data // 数据库文件地址
socket=/mysqldb/3308/socket/mysql.sock // mysql.sock文件地址
log-error=/mysqldb/3308/log/mariadb.log // 日志文件地址
pid-file=/mysqldb/3308/pid/mariadb.pid // pid文件地址
# !includedir /etc/my.cnf.d // 注销
三、配置启动脚本放到各自实例的bin目录下(启动脚本在单独准备):
### --- 把服务脚本cp到指定目录下,并配置端口号及相应信息;
[root@localhost ~]# cp mysqld /mysqldb/3306/bin/
[root@localhost ~]# chmod 700 /mysqldb/3306/bin/mysqld.sh
[root@localhost ~]# ll /mysqldb/3306/mysqld.sh // 给mysqld文件可执行权限,为了安全只有root账号才有权限
-rwx------ 1 root root 1002 Nov 7 21:17 /mysqldb/3306/mysqld
[root@localhost ~]# cp mysqld /mysqldb/3307/bin/
[root@localhost ~]# chmod 700 /mysqldb/3307/bin/mysqld.sh
[root@localhost ~]# ll /mysqldb/3307/mysqld.sh
-rwx------ 1 root root 1002 Nov 7 21:20 /mysqldb/3307/mysqld
[root@localhost ~]# cp mysqld /mysqldb/3308/bin/
[root@localhost ~]# chmod 700 /mysqldb/3308/bin/mysqld.sh
[root@localhost ~]# ll /mysqldb/3308/mysqld.sh
-rwx------ 1 root root 1002 Nov 7 21:20 /mysqldb/3308/mysqld
~~~ 执行启动脚本stop的时候,需要口令,
~~~ 默认脚本配置是有一个口令参数-p${mysql_pwd}:直接把该参数注销掉;
~~~ 就可以实现不需要口令直接启动
${cmd_path}/mysqladmin -u ${mysql_user} -S ${mysql_sock} shutdown
# ${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown
四、多实例mysql启动脚本:
#!/bin/bash
port=3306
mysql_user="root"
mysql_pwd=""
cmd_path="/usr/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
五、启动多实例程序并设置root账户口令:
### --- 多实例启动配置,并设置root账户口令
### --- 多实例3306启动配置,并设置root账户口令
[root@localhost ~]# /mysqldb/3306/bin/mysqld.sh start
[root@localhost ~]# ss -tnl
tcp LISTEN 0 50 *:3306 *:*
[root@localhost ~]# mysql -S /mysqldb/3306/socket/mysql.sock // 连接3306实例:
MariaDB [(none)]> show variables like '%port%'; // 确定自己是连在了3306数据库程序上。
| port | 3306
[root@localhost ~]# /mysqldb/3306/bin/mysqld.sh stop
Stoping MySQL...
Enter password: // 需要输入口令;可以直接更改启动脚本,去掉该参数-p${mysql_pwd}
~~~ 为3306程序创建root账户口令(设置root)口令后把启动脚本口令参数改回来)
MariaDB [(none)]> select user,host,password from mysql.user; // 查询到3306当前是没有口令的
| root | localhost.localdomain | 空 |
MariaDB [(none)]> update mysql.user set password=password("123456") where user='root'; // 为root用户创建账号密码
Query OK, 4 rows affected (0.00 sec)
MariaDB [(none)]> select user,host,password from mysql.user;
+------+-----------------------+-------------------------------------------+
| user | host | password |
+------+-----------------------+-------------------------------------------+
| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | localhost.localdomain | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
~~~ 多实例程序3306带密码登录:
[root@localhost ~]# mysql -S /mysqldb/3306/socket/mysql.sock -uroot -p123456
### --- 多实例3307启动配置,并设置root账户口令
[root@localhost ~]# /mysqldb/3307/bin/mysqld.sh start
[root@localhost ~]# ss -tnl
tcp LISTEN 0 50 *:3307 *:*
[root@localhost ~]# mysql -S /mysqldb/3307/socket/mysql.sock // 连接3307实例:
MariaDB [(none)]> show variables like '%port%'; // 确定自己是连在了3307数据库程序上。
| port | 3307
[root@localhost ~]# /mysqldb/3307/bin/mysqld.sh stop
Stoping MySQL...
Enter password: // 需要输入口令;可以直接更改启动脚本,去掉该参数-p${mysql_pwd}
~~~ 为3307程序创建root账户口令
MariaDB [(none)]> select user,host,password from mysql.user; // 查询到3307当前是没有口令的
| root | localhost.localdomain | 空 |
MariaDB [(none)]> update mysql.user set password=password("123456") where user='root'; //为root用户创建账号密码
Query OK, 4 rows affected (0.00 sec)
MariaDB [(none)]> select user,host,password from mysql.user;
+------+-----------------------+-------------------------------------------+
| user | host | password |
+------+-----------------------+-------------------------------------------+
| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | localhost.localdomain | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
~~~ 多实例程序3307带密码登录:
[root@localhost ~]# mysql -S /mysqldb/3307/socket/mysql.sock -uroot -p123456
### --- 多实例3308启动配置,并设置root账户口令
[root@localhost ~]# /mysqldb/3308/bin/mysqld.sh start
[root@localhost ~]# ss -tnl
tcp LISTEN 0 50 *:3307 *:*
[root@localhost ~]# mysql -S /mysqldb/3308/socket/mysql.sock // 连接3308实例:
MariaDB [(none)]> show variables like '%port%'; // 确定自己是连在了3308数据库程序上。
| port | 3308
[root@localhost ~]# /mysqldb/3308/bin/mysqld.sh stop
Stoping MySQL...
Enter password: // 需要输入口令;可以直接更改启动脚本,去掉该参数-p${mysql_pwd}
~~~ 为3308程序创建root账户口令
MariaDB [(none)]> select user,host,password from mysql.user; // 查询到3308当前是没有口令的
| root | localhost.localdomain | 空 |
MariaDB [(none)]> update mysql.user set password=password("123456") where user='root'; //为root用户创建账号密码
Query OK, 4 rows affected (0.00 sec)
MariaDB [(none)]> select user,host,password from mysql.user;
+------+-----------------------+-------------------------------------------+
| user | host | password |
+------+-----------------------+-------------------------------------------+
| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | localhost.localdomain | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
~~~ 多实例程序3308带密码登录:
[root@localhost ~]# mysql -S /mysqldb/3308/socket/mysql.sock -uroot -p123456
六、配置mysqlrunaall.sh并设置开机自启动:
### --- 编辑自启动脚本调用启动文件:
[root@localhost ~]# vim /mysqldb/mysqlrunall.sh
#!/bin/bash
# chkconfig: 2345 10 90
# description: 启动mysql // 这两行必须添加,没有这两行无法加入开机自启动。
/mysqldb/3306/bin/mysqld.sh start 3306
/mysqldb/3307/bin/mysqld.sh start 3307
/mysqldb/3308/bin/mysqld.sh start 3308
[root@localhost ~]# chmod +x /mysqldb/mysqlrunall.sh
[root@localhost ~]# /mysqldb/mysqlrunall.sh start
[root@localhost ~]# /mysqldb/mysqlrunall.sh stop // 停止的时候输入密码即可
~~~ 此时你可以带密码登录数据库中了
[root@localhost ~]# mysql -S /mysqldb/3306/socket/mysql.sock -uroot -p123456
### --- 将启动脚本加入到开机自启动中:
[root@localhost ~]# cp /mysqldb/mysqlrunall.sh /etc/init.d/mysqlrunall.sh // 将自启动脚本cp到/etc/init.d/并命名为mysqlrunall.sh
[root@localhost ~]# chmod +x /etc/init.d/mysqlrunall.sh // 为该脚本赋予可执行权限
[root@localhost ~]# chkconfig --add mysqlrunall.sh // 增加mysqlrunall为系统内服务;
[root@localhost ~]# chkconfig mysqlrunall.sh on // 设定mysql的各等级为on
~~~ 等级0表示:表示关机
~~~ 等级1表示:单用户模式
~~~ 等级2表示:无网络连接的多用户命令行模式
~~~ 等级3表示:有网络连接的多用户命令行模式
~~~ 等级4表示:不可用
~~~ 等级5表示:带图形界面的多用户模式
~~~ 等级6表示:重新启动
[root@localhost ~]# chkconfig --list
mysqlrunall.sh 0:off 1:off 2:on 3:on 4:on 5:on 6:off
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
cdv002-database
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」