2. MySQL 多实例
MySQL 的 三种安装方式:包安装,二进制安装,源码编译安装。
2.5.1)实战案例:通用 二进制格式安装 MySQL 5.6( 手动安装 )
下载链接:MySQL :: Download MySQL Community Server (Archived Versions)
// 创建用户组与用户groupadd -r -g 306 mysqluseradd -r -g 306 -u 306 -d /data/mysql mysql
// 可选做, 后面的脚本 mysql_install_db 可自动生成此目录// 创建目录mkdir /data/mysql -pchown mysql:mysql /data/mysql
官方:MySQL :: Download MySQL Community Server (Archived Versions)
国内:Index of /MySQL/Downloads/MySQL-5.6/
国内:Index of mysql-local/Downloads/MySQL-5.6
// 例如: mysql-5.6.50-linux-glibc2.12-x86_64.tar.gz// 解压压缩包tar xf mysql-VERSION-linux-glibc2.12-x86_64.tar.gz -C /usr/local// 创建软链接cd /usr/local && ln -sv mysql-VERSION mysqlchown -R root:root /usr/local/mysql/
// 拷贝模板配置文件cd /usr/local/mysqlcp -b support-files/my-default.cnf /etc/my.cnfvim /etc/my.cnf// mysql 语句块中添加以下三个选项[mysqld]datadir = /data/mysql # 数据存放目录innodb_file_per_table = on # 在 mariadb5.5 以上版的是默认值, 可不加skip_name_resolve = on # 禁止主机名解析, 建议使用
// "报错解决"yum install perl-Data-Dumper.x86_64 -ycd /usr/local/mysql/// 执行脚本 ( "可能会出现报错情况" )./scripts/mysql_install_db --datadir=/data/mysql --user=mysql// 验证[root@centos7 mysql] ls /data/mysql/ -l ( 默认存放在 /var/lib/mysql 目录 )total 110604-rw-rw---- 1 mysql mysql 12582912 Jun 1 16:44 ibdata1-rw-rw---- 1 mysql mysql 50331648 Jun 1 16:44 ib_logfile0-rw-rw---- 1 mysql mysql 50331648 Jun 1 16:44 ib_logfile1drwx------ 2 mysql mysql 4096 Jun 1 16:44 mysqldrwx------ 2 mysql mysql 4096 Jun 1 16:44 performance_schemadrwx------ 2 mysql mysql 4096 Jun 1 16:44 test
// 配置开机自启服务cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqldchkconfig --add mysqldservice mysqld start// 如果有对应的 service 文件可以执行下面cp /usr/local/mysql/support-files/systemd/mariadb.service/usr/lib/systemd/system/systemctl daemon-reloadsystemctl enable --now mariadb
echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.shbash /etc/profile.d/mysql.sh// "推荐"echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profilesource /etc/profile
mysql_secure_installation回车y输入密码重复密码yyyymysql -uroot -pP@ssw0rd123456
2.5.2)实战案例:一键安装 mysql-5.6 二进制包 脚本
2.5.2.1)( 在线安装 ) mysql-5.6 二进制包 脚本
// 1. 编写脚本[root@centos7 ~] vim install_mysql5.6.sh#!/bin/bash. /etc/init.d/functionsDIR=`pwd`MYSQL_VERSION=5.6.51NAME="mysql-${MYSQL_VERSION}-linux-glibc2.12-x86_64.tar.gz"FULL_NAME=${DIR}/${NAME}# URL=http://mirrors.163.com/mysql/Downloads/MySQL-5.6URL=https://ftp.ntu.edu.tw/MySQL/Downloads/MySQL-5.6/# URL=https://mirrors.huaweicloud.com/mysql/Downloads/MySQL-5.6/DATA_DIR="/data/mysql"rpm -q wget || yum -y -q install wgetwget $URL/$NAME || { action "下载失败,异常退出" false;exit 10; }yum install -y -q libaio perl-Data-Dumper autoconfif [ -f ${FULL_NAME} ];thenaction "安装文件存在"elseaction "安装文件不存在" falseexit 3fiif [ -e /usr/local/mysql ];thenaction "Mysql 已经安装" falseexit 3elsetar xf ${FULL_NAME} -C /usr/local/srcln -sv /usr/local/src/mysql-${MYSQL_VERSION}-linux-glibc2.12-x86_64 /usr/local/mysqlif id mysql;thenaction "mysql 用户已经存在,跳过创建用户过程"elseuseradd -r -s /sbin/nologin mysqlfiif id mysql;thenchown -R mysql.mysql /usr/local/mysql/*if [ ! -d /data/mysql ];thenmkdir -pv /data/mysql && chown -R mysql.mysql /data /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql --basedir=/usr/local/mysql/cp /usr/local/src/mysql-${MYSQL_VERSION}-linux-glibc2.12-x86_64/support-files/mysql.server /etc/init.d/mysqldchmod a+x /etc/init.d/mysqldcat > /etc/my.cnf <<EOF[mysqld]socket=/data/mysql/mysql.sockuser=mysqlsymbolic-links=0datadir=/data/mysqlinnodb_file_per_table=1[client]port=3306socket=/data/mysql/mysql.sock[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/tmp/mysql.sockEOFln -sv /usr/local/mysql/bin/mysql /usr/bin/mysql/etc/init.d/mysqld startchkconfig --add mysqldelseaction "MySQL数据目录已经存在" falseexit 3fififi// 2. 运行脚本[root@centos7 ~] bash install_mysql5.6.sh// 3. 验证[root@centos7 ~] cat /etc/my.cnf[mysqld]socket=/data/mysql/mysql.sockuser=mysqlsymbolic-links=0datadir=/data/mysqlinnodb_file_per_table=1[client]port=3306socket=/data/mysql/mysql.sock[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/tmp/mysql.sock[root@centos7 ~] lsinstall_mysql5.6.sh my.cnf mysql-5.6.47-linux-glibc2.12-x86_64.tar.gz
// 验证服务netstat -nltp// 登录mysql
2.5.2.2)离线安装 mysql-5.6 二进制包的脚本
// 准备安装包, 脚本和 my.cnf 配置文件, "放在同一目录下"[root@centos8 ~] vim install_mysql-5.6.sh#!/bin/bash# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.50-linux-glibc2.12-x86_64.tar.gzDIR=`pwd`NAME="/mysql-5.6.50-linux-glibc2.12-x86_64.tar.gz"FULL_NAME=${DIR}/${NAME}DATA_DIR="/data/mysql"yum install libaio perl-devel ncurses-compat-libs -y# CentOS8 需要安装 ncurses-compat-libs 包提供 libncurses.so.5 库if [ -f ${FULL_NAME} ];thenecho "install file is exist"elseecho "install file isn't exist"exit 3fiif [ -h /usr/local/mysql ];thenecho "MySQL already install"exit 3elsetar xvf ${FULL_NAME} -C /usr/local/src/ln -sv /usr/local/src/mysql-5.6.50-linux-glibc2.12-x86_64 /usr/local/mysqlif id mysql;thenecho "mysql user is exist,skip create user"elseuseradd -r -u 306 -d /data/mysql mysqlfiif id mysql;thenchown -R mysql.mysql /usr/local/mysql/if [ ! -d /data/mysql ];thenmkdir -pv /data/mysql && chown -R mysql.mysql /data/mysql//usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql -basedir=/usr/local/mysqlcp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqldchmod a+x /etc/init.d/mysqldcp ${DIR}/my.cnf /etc/my.cnfln -sv /usr/local/mysql/bin/mysql /usr/bin/mysql/etc/init.d/mysqld startchkconfig --add mysqldelseecho "MySQL data dir already exist"exit 3fififi[root@centos8 ~] vim my.cnf[mysqld]socket=/data/mysql/mysql.sockuser=mysqlsymbolic-links=0datadir=/data/mysqlinnodb_file_per_table=1[client]port=3306socket=/data/mysql/mysql.sock[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/tmp/mysql.sock[root@centos8 ~] ls[root@centos8 ~] bash install_mysql-5.6.sh
2.5.3)实战案例:通用 二进制安装 MySQL 5.7 和 MySQL8.0
报错解决:mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file-CSDN博客
yum install libncurses* -yum install libaio numactl-libs -y
useradd -r -g mysql -s /bin/false mysql
国内:mysql-MySQL-5.7安装包下载_开源镜像站-阿里云
// 下载 MySQL 二进制包wget https://mirrors.aliyun.com/mysql/MySQL-5.7/mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz// 解压tar xf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz -C /usr/local// 软链接cd /usr/local/ && ln -s mysql-5.7.36-linux-glibc2.12-x86_64/ mysqlchown -R root.root /usr/local/mysql/
echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.shbash /etc/profile.d/mysql.sh"推荐"echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profilesource /etc/profile
cp /etc/my.cnf{,.bak}vim /etc/my.cnf[mysqld]datadir=/data/mysqlskip_name_resolve=1socket=/data/mysql/mysql.sock log-error=/data/mysql/mysql.logpid-file=/data/mysql/mysql.pid[client]socket=/data/mysql/mysql.sock
mkdir /data/mysql -pmysqld --initialize --user=mysql --datadir=/data/mysqlgrep password /data/mysql/mysql.log2023-12-30T09:40:49.213204Z 1 [Note] A temporary password is generated for root@localhost: Q.xer?jWC8;O // 注意生成 root 的初始密码awk '/temporary password/{print $NF}' /data/mysql/mysql.logQ.xer?jWC8;O
2.5.3.6.2)方式 2:生成 root 空密码( 省略 )
mysqld --initialize-insecure --user=mysql --datadir=/data/mysql
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
service mysqld start
// 修改前面生成的随机密码为指定密码awk '/temporary password/{print $NF}' /data/mysql/mysql.logQ.xer?jWC8;Omysqladmin -uroot -p'Q.xer?jWC8;O' password P@ssw0rd123456# 修改前面生成的空密码为指定密码mysqladmin -uroot password P@ssw0rd123456
报错解决:mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file-CSDN博客
mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
// mysql -uroot -pP@ssw0rd123456
2.5.4)实战案例:一键安装 MySQL5.7 和 MySQL8.0 二进制包的脚本
( 离线安装 ) MySQL5.7 和 MySQL8.0 二进制包的脚本
#!/bin/bash# MySQL Download URL:# https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz#h ttp://mirrors.163.com/mysql/Downloads/MySQL-5.7/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz# http://mirrors.163.com/mysql/Downloads/MySQL-8.0/mysql-8.0.23-linux-glibc2.12-x86_64.tar.xz. /etc/init.d/functionsSRC_DIR=`pwd`MYSQL='mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz'#MYSQL='mysql-8.0.23-linux-glibc2.12-x86_64.tar.xz'MYSQL_ROOT_PASSWORD=123456COLOR='echo -e \E[01;31m'END='\E[0m'check (){if [ $UID -ne 0 ]; thenaction "当前用户不是root,安装失败" falseexit 1ficd $SRC_DIRif [ ! -e $MYSQL ];then$COLOR"缺少${MYSQL}文件"$END$COLOR"请将相关软件放在${SRC_DIR}目录下"$ENDexitelif [ -e /usr/local/mysql ];thenaction "数据库已存在,安装失败" falseexitelsereturnfi}install_mysql(){$COLOR"开始安装MySQL数据库..."$ENDyum -y -q install libaio numactl-libstar xf $MYSQL -C /usr/local/MYSQL_DIR=`echo $MYSQL| sed -nr 's/^(.*[0-9]).*/\1/p'`ln -s /usr/local/$MYSQL_DIR /usr/local/mysqlchown -R root.root /usr/local/mysql/id mysql &> /dev/null || { useradd -s /sbin/nologin -r mysql ; action "创建mysql用户"; }echo 'PATH=/usr/local/mysql/bin/:$PATH' > /etc/profile.d/mysql.sh. /etc/profile.d/mysql.shln -s /usr/local/mysql/bin/* /usr/bin/cat > /etc/my.cnf <<-EOF[mysqld]server-id=`hostname -I|cut -d. -f4`log-bindatadir=/data/mysqlsocket=/data/mysql/mysql.sock log-error=/data/mysql/mysql.logpid-file=/data/mysql/mysql.pid[client]socket=/data/mysql/mysql.sockEOF[ -d /data ] || mkdir /datamysqld --initialize-insecure --user=mysql --datadir=/data/mysqlcp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqldchkconfig --add mysqldchkconfig mysqld onservice mysqld start[ $? -ne 0 ] && { $COLOR"数据库启动失败,退出!"$END;exit; }# MYSQL_OLDPASSWORD=`awk '/A temporary password/{print $NF}' /data/mysql/mysql.log`# mysqladmin -uroot -p$MYSQL_OLDPASSWORD password $MYSQL_ROOT_PASSWORD &>/dev/nullsleep 3mysqladmin -uroot password $MYSQL_ROOT_PASSWORD &>/dev/nullaction "数据库安装完成"}checkinstall_mysql
[root@centos7 ~] cat install_online_mysql5.7or8.0_for_centos.sh#!/bin/bash. /etc/init.d/functionsSRC_DIR=`pwd`MYSQL='mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz'# URL=http://mirrors.163.com/mysql/Downloads/MySQL-5.7URL=https://repo.huaweicloud.com/mysql/Downloads/MySQL-5.7/# MYSQL='mysql-8.0.23-linux-glibc2.12-x86_64.tar.xz'# URL=http://mirrors.163.com/mysql/Downloads/MySQL-8.0COLOR='echo -e \E[01;31m'END='\E[0m'MYSQL_ROOT_PASSWORD=mageducheck (){if [ $UID -ne 0 ]; thenaction "当前用户不是root,安装失败" falseexit 1ficd $SRC_DIRrpm -q wget || yum -y -q install wgetwget $URL/$MYSQLif [ ! -e $MYSQL ];then$COLOR"缺少${MYSQL}文件"$END$COLOR"请将相关软件放在${SRC_DIR}目录下"$ENDexitelif [ -e /usr/local/mysql ];thenaction "数据库已存在,安装失败" falseexitelsereturnfi}mkdir /data/mysql -pinstall_mysql(){$COLOR"开始安装MySQL数据库..."$ENDyum -y -q install libaio numactl-libs libaio &> /dev/nullcd $SRC_DIRtar xf $MYSQL -C /usr/local/MYSQL_DIR=`echo $MYSQL| sed -nr 's/^(.*[0-9]).*/\1/p'`ln -s /usr/local/$MYSQL_DIR /usr/local/mysqlchown -R root.root /usr/local/mysql/id mysql &> /dev/null || { useradd -s /sbin/nologin -r mysql ; action "创建 mysql 用户"; }echo 'PATH=/usr/local/mysql/bin/:$PATH' > /etc/profile.d/mysql.sh. /etc/profile.d/mysql.shln -s /usr/local/mysql/bin/* /usr/bin/cat > /etc/my.cnf <<-EOF[mysqld]server-id=`hostname -I|cut -d. -f4`log-bindatadir=/data/mysqlsocket=/data/mysql/mysql.sock log-error=/data/mysql/mysql.logpid-file=/data/mysql/mysql.pid[client]socket=/data/mysql/mysql.sockEOFmysqld --initialize --user=mysql --datadir=/data/mysqlcp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqldchkconfig --add mysqldchkconfig mysqld onservice mysqld start[ $? -ne 0 ] && { $COLOR"数据库启动失败,退出!"$END;exit; }MYSQL_OLDPASSWORD=`awk '/A temporary password/{print $NF}' /data/mysql/mysql.log`mysqladmin -uroot -p$MYSQL_OLDPASSWORD password $MYSQL_ROOT_PASSWORD &>/dev/nullaction "数据库安装完成"}checkinstall_mysql
yum install gcc gcc-c++ cmake bison bison-devel zlib-devel libcurl-devel libarchive-devel boost-devel ncurses-devel gnutls-devel libxml2-devel openssl-devel libevent-devel libaio-devel perl-Data-Dumper -y
useradd -r -s /sbin/nologin -d /data/mysql mysql
chown mysql.mysql /data/mysql
cmake 的 重要特性 之一是其独立于源码(out-of-source)的编译功能,即编译工作可以在另一个指定的目录中而非源码目录中进行,这可以保证源码目录不受任何一次编译的影响,因此在同一个源码树上可以进行多次不同的编译,如针对于不同平台编译。
https://dev.mysql.com/doc/refman/5.7/en/source-configuration-options.html
在官网 MySQL :: Download MySQL Community Server (Archived Versions) 下载源码包
上面我们下载的是编译后的二进制包。( 二进制安装使用的更为广泛一些 )
tar xvf mysql-5.6.51.tar.gz -C /usr/local/src
# mariadb-10.2.18.tar.gz
提示:如果出错,执行 rm -rf CMakeCache.txt
// 切换目录cd /usr/local/srcdu -sh mysql-5.6.51// 使用 cmake 命令进行编译cd mysql-5.6.51/cmake . \-DCMAKE_INSTALL_PREFIX=/apps/mysql \-DMYSQL_DATADIR=/data/mysql/ \-DSYSCONFDIR=/etc/ \-DMYSQL_USER=mysql \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_ARCHIVE_STORAGE_ENGINE=1 \-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \-DWITH_PARTITION_STORAGE_ENGINE=1 \-DWITHOUT_MROONGA_STORAGE_ENGINE=1 \-DWITH_DEBUG=0 \-DWITH_READLINE=1 \-DWITH_SSL=system \-DWITH_ZLIB=system \-DWITH_LIBWRAP=0 \-DENABLED_LOCAL_INFILE=1 \-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \-DDEFAULT_CHARSET=utf8 \-DDEFAULT_COLLATION=utf8_general_ci// 编译安装 ( 注意: 主机 CPU 核数 )lscpu | grep Socketmake -j 8 && make install// 验证编译安装目录 ( 注意: /usr/local/src 为源码存放目录 )ll /apps/mysql ( 程序最终存放目录 )
echo 'PATH=/apps/mysql/bin:$PATH' > /etc/profile.d/mysql.shbash /etc/profile.d/mysql.sh'推荐'echo 'PATH=/apps/mysql/bin:$PATH' > /etc/profilesource /etc/profile
// 切换目录cd /apps/mysql/// 必须在 /apps/mysql 目录下执行 mysql_install_db 脚本 ( 否则会报错 )scripts/mysql_install_db --datadir=/data/mysql/ --user=mysql'验证'll /data/mysql/
// 复制模板配置文件 ( -b 参数会备份被覆盖的文件 )cp -b /apps/mysql/support-files/my-default.cnf /etc/my.cnf// 针对旧版本或 mariadb-10.2.18.tar.gzcp /apps/mysql/support-files/my-huge.cnf /etc/my.cnf
// 复制模板文件cp /apps/mysql/support-files/mysql.server /etc/init.d/mysqld// 设置开机自启 chkconfig --add mysqldservice mysqld start// 验证netstat -nltp
回车
y
输入密码
重复密码
y
y
y
y
// 1) 低版本 Docker 安装yum install docker -y----// < '推荐' >// 2) 高版本 Docker 安装curl -fsSL https://get.docker.com/ | sh----// 关闭防火墙systemctl disable --now firewalldsetenforce 0// 启用 Dockersystemctl enable --now docker----// 3) 安装 Docker-Composecurl -L https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-composechmod +x /usr/local/bin/docker-composedocker-compose -v[root@centos8 ~] docker run --name mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.30[root@centos8 ~] docker images[root@centos8 ~] docker ps -a
[root@centos8 ~] yum install mysql -y
[root@centos8 ~] mysql -uroot -p123456 -h127.0.0.1
参考:https://www.cnblogs.com/yangliheng/p/5871215.html
简单地说,Mysql 多实例就是 在一台服务器上同时开启多个不同的服务端口(3306、3307),同时运行多个 Mysql 服务进程,这些服务进程通过不同的 Socket 监听不同的服务端口来提供服务。
这些 Mysql 多实例公用一套 Mysql 安装程序,一般使用不同的 my.cnf(也可以相同)配置文件,启动程序和数据文件。在提供服务时,多实例 Mysql 在逻辑上看来是 各自独立 的,它们根据配置文件的对应设定值,获得服务器相应数量的硬件资源。
打个比方,Mysql 多实例就相当于房子的多个卧室,每个实例可以看作一间卧室,整个服务器就是一套房子,服务器的硬件资源(cpu、mem、disk)、软件资源(centos操作系统)可以看作房子的卫生间、客厅,是房子的公用资源。
多实例 类似微信多开,多实例的不同端口号 类比微信多开的不同微信账号,数据库类比聊天窗口,表类比聊天记录。
MySQL 多实例 就是在一台服务器上同时开启多个不同的服务端口(如:3306、3307 等),同时运行多个 MySQL 服务进程,这些服务进程通过不同的 Socket 监听不同的服务端口来提供服务。
多实例可能是 MySQL 的不同版本,也可能是 MySQL 的同一版本实现。
可有效利用服务器资源。当单个服务器资源有剩余时,可以充分利用剩余资源提供更多的服务,且可以实现资源的逻辑隔离节约服务器资源。例如公司服务器资源紧张,但是数据库又需要各自尽量独立的提供服务,并且还需要到主从复制等技术,多实例就是最佳选择。
存在资源互相抢占的问题。比如:当某个数据库实例并发很高或者 SQL 查询慢时,整个实例会消耗大量的 CPU、磁盘I/O 等资源,导致服务器上面其他的数据库实例在提供服务的质量也会下降,所以具体的需求要根据自己的实际情况而定。
MySQL 官方文档提到的单一配置文件、单一启动程序多实例部署方式
多配置文件、多启动程序部署方式是针对每个实例都有独立的配置文件和目录,管理灵活,此方案耦合度较低
2.8.2)实战案例 :CentOS 8 实现 MariaDB Yum 安装 多实例实现
CentOS 8 Yum 安装 MariaDB-10.3.17 并实现三个实例
yum install ntpdate -y && ntpdate ntp.aliyun.com
systemctl disable --now firewalld
sed -ri.bak 's/^(SELINUX=).*/\1disabled/' /etc/selinux/config
setenforce 0
[root@centos8 ~] yum install mariadb-server -y
// 创建各个实例独自的目录[root@centos8 ~] mkdir -pv /mysql/{3306,3307,3308}/{data,etc,socket,log,bin,pid}// 授权目录 ( 都基于 mysql 用户运行 )[root@centos8 ~] chown -R mysql.mysql /mysql[root@centos8 ~] tree -d /mysql/
[root@centos8 ~] mysql_install_db --user=mysql --datadir=/mysql/3306/data
[root@centos8 ~] mysql_install_db --user=mysql --datadir=/mysql/3307/data
[root@centos8 ~] mysql_install_db --user=mysql --datadir=/mysql/3308/data
[root@centos8 ~] vim /mysql/3306/etc/my.cnf[mysqld]port=3306datadir=/mysql/3306/datasocket=/mysql/3306/socket/mysql.socklog-error=/mysql/3306/log/mysql.logpid-file=/mysql/3306/pid/mysql.pid// 重复上面步骤配置 3307, 3308 的配置文件[root@centos8 ~] sed 's/3306/3307/' /mysql/3306/etc/my.cnf > /mysql/3307/etc/my.cnf[root@centos8 ~] sed 's/3306/3308/' /mysql/3306/etc/my.cnf > /mysql/3308/etc/my.cnf'验证'[root@centos8 ~] cat /mysql/3307/etc/my.cnf[root@centos8 ~] cat /mysql/3308/etc/my.cnf
[root@centos8 ~] vim /mysql/3306/bin/mysqld#!/bin/bashport=3306mysql_user="root"mysql_pwd=""cmd_path="/usr/bin"mysql_basedir="/mysql"mysql_sock="${mysql_basedir}/${port}/socket/mysql.sock"function_start_mysql(){if [ ! -e "$mysql_sock" ];thenprintf "Starting MySQL...\n"${cmd_path}/mysqld_safe --defaults-file=${mysql_basedir}/${port}/etc/my.cnf &> /dev/null &elseprintf "MySQL is running...\n"exitfi}function_stop_mysql(){if [ ! -e "$mysql_sock" ];thenprintf "MySQL is stopped...\n"exitelseprintf "Stoping MySQL...\n"${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdownfi}function_restart_mysql(){printf "Restarting MySQL...\n"function_stop_mysqlsleep 2function_start_mysql}case $1 instart)function_start_mysql;;stop)function_stop_mysql;;restart)function_restart_mysql;;*)printf "Usage: ${mysql_basedir}/${port}/bin/mysqld {start|stop|restart}\n"esac// 重复上述过程, 分别建立 3307, 3308 的启动脚本 [root@centos8 ~] sed 's/3306/3307/' /mysql/3306/bin/mysqld > /mysql/3307/bin/mysqld[root@centos8 ~] sed 's/3306/3308/' /mysql/3306/bin/mysqld > /mysql/3308/bin/mysqld'授权'[root@centos8 ~] chmod +x /mysql/3306/bin/mysqld[root@centos8 ~] chmod +x /mysql/3307/bin/mysqld[root@centos8 ~] chmod +x /mysql/3308/bin/mysqld
[root@centos8 ~] /mysql/3306/bin/mysqld start
[root@centos8 ~] /mysql/3307/bin/mysqld start
[root@centos8 ~] /mysql/3308/bin/mysqld start
[root@centos8 ~] netstat -nltp
[root@centos8 ~] /mysql/3308/bin/mysqld start'两种连接方法'[root@centos8 ~] mysql -h127.0.0.1 -P3308[root@centos8 ~] mysql -uroot -S /mysql/3308/socket/mysql.sock// 确认连接的端口MariaDB [(none)]> show variables like 'port';+---------------+-------+| Variable_name | Value |+---------------+-------+| port | 3308 |+---------------+-------+1 row in set (0.001 sec)MariaDB [(none)]>// '测试多实例效果'MariaDB [(none)]> create database test3308;Query OK, 1 row affected (0.001 sec)MariaDB [(none)]> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || test || test3308 |+--------------------+5 rows in set (0.001 sec)// 我们在 3308 实例创建的数据库// 其他实例是看不到的, '数据库实例间相互独立.'[root@centos8 ~] mysql -uroot -S /mysql/3307/socket/mysql.sockMariaDB [(none)]> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || test |+--------------------+4 rows in set (0.001 sec)
// 加上 root 的口令[root@centos8 ~] mysqladmin -uroot -S /mysql/3306/socket/mysql.sock password 'P@ssw0rd'[root@centos8 ~] mysqladmin -uroot -S /mysql/3307/socket/mysql.sock password 'P@ssw0rd'[root@centos8 ~] mysqladmin -uroot -S /mysql/3308/socket/mysql.sock password 'P@ssw0rd'// '或者' 登录 mysql, 执行如下 SQL 语句也可以Mariadb> update mysql.user set password=password("P@ssw0rd") where user='root';Mariadb> flush privileges;// 重复步骤, 分别修改别外两个实例 3307, 3308 对应 root 口令---// '关闭实例', 需要手动输入 root 的密码[root@centos8 ~] /mysql/3308/bin/mysqld stopStoping MySQL...Enter password:// 当然, 我们也可以将密码写入到 mysqld 服务文件中 ( 不安全 )vim /mysql/3308/bin/mysqldmysql_pwd="P@ssw0rd"// 重复上述过程, 分别在 3306, 3307 的启动脚本中填写密码信息[root@centos8 ~] /mysql/3308/bin/mysqld startMySQL is running...// 再次关闭实例, '无需再手动输入密码啦'[root@centos8 ~] /mysql/3308/bin/mysqld stopStoping MySQL...
[root@centos8 ~] mysql -uroot -p -S /mysql/3306/socket/mysql.sock
Enter password:
[root@centos8 ~] vim /etc/rc.d/rc.local// 在最后一行加下面内容for i in {3306..3308};do /mysql/$i/bin/mysqld start;done'授权'[root@centos8 ~] chmod +x /etc/rc.d/rc.local'验证'[root@centos8 ~] bash /etc/rc.d/rc.local[root@centos8 ~] netstat -nltp'重启验证'[root@centos8 ~] reboot[root@centos8 ~] netstat -nltp
相关文章:

2. MySQL 多实例
重点: MySQL 的 三种安装方式:包安装,二进制安装,源码编译安装。 MySQL 的 基本使用 MySQL 多实例 DDLcreate alter drop DML insert update delete DQL select 2.5)通用 二进制格式安装 MySQL 2.5.1ÿ…...
两个五层决策树和一个十层决策树的区别
随机森林的弹性: 随机森林中的多个决策树是相互独立构建的,因此两个五层决策树和一个十层决策树之间的区别可能在于它们对训练数据的不同学习。这种弹性有助于模型更好地适应不同的数据模式。 过拟合风险: 十层决策树可能更容易过拟合训练数据,尤其是在数…...

案例分析技巧-软件工程
一、考试情况 需求分析(※※※※)面向对象设计(※※) 二、结构化需求分析 数据流图 数据流图的平衡原则 数据流图的答题技巧 利用数据平衡原则,比如顶层图的输入输出应与0层图一致补充实体 人物角色:客户、…...

如何使用docker compose安装APITable并远程访问登录界面
文章目录 前言1. 部署APITable2. cpolar的安装和注册3. 配置APITable公网访问地址4. 固定APITable公网地址 正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能学习网站, 通俗易懂,风趣幽默,忍不住分享一下给大家。 …...

深入了解Matplotlib中的子图创建方法
深入了解Matplotlib中的子图创建方法 一 add_axes( **kwargs):1.1 函数介绍1.2 示例一 创建第一张子图1.2 示例二 polar参数的运用1.3 示例三 创建多张子图 二 add_subplot(*args, **kwargs):2.1 函数介绍2.2 示例一 三 两种方法的区别3.1 参数形式3.2 布局灵活性3.3 适用场景3…...
云计算运维 · 第三阶段 · git
学习b记 第三阶段 三、持续集成 1、git #安装 yum -y install git[rootgit-git ~]# git config –-global user.name "qxl" # 配置git使用用户 [rootgit-git ~]# git config –-global user.email "qxlmail.com" # 配置git使用邮箱 [rootgit-git ~]# g…...

【幻兽帕鲁】开服务器,高性能高带宽(100mbps),免费!!!【学生党强推】
【幻兽帕鲁】开服务器,高性能高带宽(100mbps),免费!!!【学生党强推】 教程相关视频地址:https://www.bilibili.com/video/BV16e411Y7Fd/ 目前幻兽帕鲁开服务器有以下几套比较性价比的…...

微信小程序|推箱子小游戏
推箱子游戏是一种经典的益智游戏,通过移动箱子将其推到指定位置,完成关卡的过程。随着小程序的发展,越来越多的人开始在手机上玩推箱子游戏。本文将介绍如何利用小程序实现推箱子游戏,并分享一些技术实现的方法。 目录 引言游戏背景介绍游戏规则及挑战技术实现步骤创建游戏…...

【Linux】—— 信号的产生
本期,我们今天要将的是信号的第二个知识,即信号的产生。 目录 (一)通过终端按键产生信号 (二)调用系统函数向进程发信号 (三)由软件条件产生信号 (四)硬件…...
【算法】Hash 算法-关注优化细节
//给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 // // 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 // // // // 示例 1: // // //输入:nums [100,4…...

回归预测 | Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入单输出回归预测
回归预测 | Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入…...

Idea设置代理后无法clone git项目
背景 对于我们程序员来说,经常上github找项目、找资料是必不可少的,但是一些原因,我们访问的时候速度特别的慢,需要有个代理,才能正常的访问。 今天碰到个问题,使用idea工具 clone项目,速度特…...
tkMapper 通用mapper的批量更新 批量新增 官方实现 springboot项目 依赖引入
文章目录 场景官方插件源码解析项目细节小结 场景 在许多业务场景下,需要对tkMapper的功能进行增强,需要用到批量新增和批量更新(这里是唯一主键去更新的),许多论文博客自己写的看起来并不行,我们这里就采…...
【leetcode刷刷】回溯:77.组合
77. 组合 第一次专门做回溯,有点难理解。首先可以理解回溯可以可视化为树的搜索,因此这道题,树的宽度为n,树的深度为kpath作为一个参数传入有点难想回溯没有返回值剪纸更难想,通过列算式可以勉强得到for的表达式&…...
【OOP】Python的OOP编程笔记
1.类变量和实例变量 类变量:变量属于类,在对象中是共用的。访问方式为类名.变量名,或对象名.__class__.变量名 实例变量:定义在方法中的变量,属于具体对象。访问方式为对象名.变量名 类变量访问方式 class Car:# nu…...

一进一出模拟量信号隔离变送器
一进一出模拟量信号隔离变送器 捷晟达科技推出一进一出模拟量信号隔离变送器 深圳捷晟达科技推出一款具有隔离,放大,转换保护功能的一进一出的小型隔离变送器设备,该设备可以把模拟量(4-20mA/0-10V等)标准信号转换用户需要的信号,该产品具有抗EMC干扰,可以有效的保护后级设备安…...

Mybatis-plus原生pages分页未生效的解决方案
文章目录 前言原因1、Mybatis Plus版本的问题2、Mapper.xml文件中SQL语句格式问题3、Mybatis Plus默认分页拦截器问题4、分页参数传参问题5、分页配置的问题 解决方案1、升级对应的Mybatis-plus版本分页插件配置问题3、自定义分页拦截器4、正确的参数5、不同版本的配置文件3.4.…...

【linux】-centos7版本前后-变化篇
1.centos7版本前后区别 首先文件系统变化,由EXT4,变为XFS格式。可支持容量500TB的文件,而6代仅能支持16TB。首个进程变为systemd, 替换了熟悉的init进程。它的特点是功能强大,体积也很强大。 systemd给我们带来了一个全家桶命令&…...

001集—shapefile(.shp)格式详解——arcgis
一、什么是shapefile Shapefile 是一种用于存储地理要素的几何位置和属性信息的非拓扑简单格式。shapefile 中的地理要素可通过点、线或面(区域)来表示。包含 shapefile 的工作空间还可以包含 dBASE 表,它们用于存储可连接到 shapefile 的要…...
ssrf服务器请求伪造漏洞(个人学习)
SSRF前置学习须了解net工作原理 计算机网络 网络地址转换NAT_内部本地地址-CSDN博客 可以看这个来了解 SSRF 攻击的目标:从外网无法访问的内部网络 形成原因:大部分服务器提供了从外部应用获取数据的功能,但是对目标地址没有做过滤和限制…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...

Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...