首页 > 数据库 >mysql安装以及多实例

mysql安装以及多实例

时间:2024-07-27 16:51:53浏览次数:12  
标签:51 安装 linux0224 db 实例 tech mysql root

mysql安装启动----------------------------------------

1.安装全流程

yum
源码编译
rpm包

装和卸载
如何处理依赖关系
都是要掌握的技能


这里是,二进制解压即用

# 确认时间正确
[root@tech-db-51 /opt]#crontab -l
* * * * * ntpdate -u ntp.aliyun.com


1 .准备好包
[root@tech-db-51 /opt]#ll
total 707688
-rw-r--r-- 1 root root 724672294 Jul 28 19:56 mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz

[root@tech-db-51 /opt]#du -h
692M	.


2. 解压缩,配置PATH
[root@tech-db-51 /opt]## 常见做法,做软连接,便于二进制包的升级,后续的使用路径,用的都是软连接

[root@tech-db-51 /opt]#ln -s /opt/mysql-5.7.28-linux-glibc2.12-x86_64   /opt/mysql

[root@tech-db-51 /opt]#ls /opt/ -l
total 707688
lrwxrwxrwx 1 root root        40 Jul 28 19:58 mysql -> /opt/mysql-5.7.28-linux-glibc2.12-x86_64
drwxr-xr-x 9 root root       129 Jul 28 19:57 mysql-5.7.28-linux-glibc2.12-x86_64
-rw-r--r-- 1 root root 724672294 Jul 28 19:56 mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz


# 3. 配置PATH
echo 'export PATH=$PATH:/opt/mysql/bin'  >> /etc/profile
source /etc/profile

# 4. 验证mysql版本
[root@tech-db-51 /opt]#mysql -V 
mysql  Ver 14.14 Distrib 5.7.28, for linux-glibc2.12 (x86_64) using  EditLine wrapper


# 5.删除mariadb的依赖,删除默认的配置文件 
yum remove mariadb-libs.x86_64  -y
rm -f /etc/my.cnf

# 6.装mysql5.7特有的依赖包
yum install libaio-devel -y

#7. 创建数据目录,
# 准备mysql的数据目录,授权用户

useradd -s /sbin/nologin -M mysql
mkdir -p /linux0224/
mkdir -p /linux0224/mysql_3306/



# 授权

chown -R mysql.mysql /linux0224/
chown -R mysql.mysql /linux0224/mysql_3306/
chown -R mysql.mysql /opt/mysql*

#检查

ls -ld  /linux0224 /linux0224/mysql_3306/  /opt/mysql*

[root@tech-db-51 /opt]#ls -ld  /linux0224 /linux0224/mysql_3306/  /opt/mysql*



# 8.此时自建的mysql目录,没有输数据,mysql 无法使用,初始化生成mysql默认库的数据源 ,用户等信息,即可启动
# mysqld 服务端命令,启动,初始化,都用的这个
# --basedir  mysql二进制命令装再哪了,主程序目录
# --datadir 数据目录初始到哪

mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql --datadir=/linux0224/mysql_3306/

2.配置文件

初始化完毕后,有配置文件即可正确启动,告诉 my.cnf
mysqld的数据源目录在哪,日志写入到哪等


# /etc/my.cnf 默认mysql会去读这个,不指定,也读这个

# [mysqld] 服务端会读取的配置
# [mysql]  再机器本地,执行mysql命令,客户端读取的配置 
# socket 本地进程套接字文件,用于mysql客户端再本地区链接



cat >/etc/my.cnf <<'EOF'

[mysqld]
port=3306
user=mysql
basedir=/opt/mysql
datadir=/linux0224/mysql_3306/
socket=/tmp/mysql.sock

[mysql]
socket=/tmp/mysql.sock
EOF

3.启动脚本

复制自带脚本即可

[root@tech-db-51 /linux0224/mysql_3306]#cp /opt/mysql/support-files/mysql.server   /etc/init.d/mysqld

[root@tech-db-51 /linux0224/mysql_3306]#systemctl daemon-reload

[root@tech-db-51 /linux0224/mysql_3306]#systemctl status mysqld
● mysqld.service - LSB: start and stop MySQL
   Loaded: loaded (/etc/rc.d/init.d/mysqld; bad; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:systemd-sysv-generator(8)

4.登录mysql

# 启动即可
[root@tech-db-51 /linux0224/mysql_3306]#systemctl start mysqld

[root@tech-db-51 /linux0224/mysql_3306]#mysql 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.28 MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

mysql多实例管理--------------------------------------

什么是多实例

多实例,就是一台linux上,同时运行多个mysql,当然是区别了不同的端口,例如3306、3307、3308。运行三个mysql数据库

不同的端口
不同的数据目录,不同的配置文件
不同的mysql进程,不同的pid

多实例的好处

可有效利用服务器资源。当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务,且可以实现资源的逻辑隔离。

多实例弊端

会存在资源互相抢占的问题。当某个数据库实例并发很高或者有SQL慢查询时,整个实例会消耗大量的系统CPU、磁盘I/O等资源,导致服务器上的其他数据库实例提供服务的质量一起下降。
这就相当于大家住在一个房子的不同卧室中,早晨起来上班,都要刷牙、洗脸等,这样卫生间就会长期处于占用状态,其他人则必须要等待。
图解多实例

1创建数据目录

mkdir -p  /linux0224/mysql_3307

mkdir -p  /linux0224/mysql_3308

chown -R mysql.mysql /linux0224

2初始化2个实例的数据

mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql --datadir=/linux0224/mysql_3307


mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql --datadir=/linux0224/mysql_3308

# 都会默认创建一个账户,链接权限

root 空密码 只允许再localhost登录

至此有3个实例了

[root@tech-db-51 /linux0224]#ll
total 4
drwxr-xr-x 6 mysql mysql 4096 Jul 28 14:00 mysql_3306
drwxr-xr-x 5 mysql mysql  314 Jul 28 14:37 mysql_3307
drwxr-xr-x 5 mysql mysql  314 Jul 28 14:38 mysql_3308

[root@tech-db-51 /linux0224]#du -sh *
134M	mysql_3306
122M	mysql_3307
122M	mysql_3308

3额外创建俩实例的配置文件

3306

[root@tech-db-51 /linux0224]#cat /etc/my.cnf 

[mysqld]
port=3306
user=mysql
basedir=/opt/mysql
datadir=/linux0224/mysql_3306/
socket=/tmp/mysql.sock

[mysql]
socket=/tmp/mysql.sock

3307

cat >/etc/mysql_3307.cnf <<'EOF'
[mysqld]
port=3307
user=mysql
basedir=/opt/mysql/
datadir=/linux0224/mysql_3307/
socket=/linux0224/mysql_3307/mysql.sock
log_error=/linux0224/mysql_3307/mysql.log
EOF

3308

cat >/etc/mysql_3308.cnf <<'EOF'

[mysqld]
port=3308
user=mysql
basedir=/opt/mysql/
datadir=/linux0224/mysql_3308/
socket=/linux0224/mysql_3308/mysql.sock
log_error=/linux0224/mysql_3308/mysql.log
EOF

检查配置文件

[root@tech-db-51 /linux0224]#ls /etc/my*
/etc/my.cnf  /etc/mysql_3307.cnf  /etc/mysql_3308.cnf

多实例脚本

生成 3307 和3308即可

cat > /linux0224/3308.sh <<'EOF'
port="3308"
mysql_user="mysql"
Cmdpath="/opt/mysql/bin/"
# socket用于判断程序是否运行
# 程序运行中,该socket文件存在
# 进程挂了,socket文件自动消失

mysql_sock="/linux0224/mysql_${port}/mysql.sock"
# 定义路径,mysql进程启动后,一个存储该进程pid号码的文件在哪
mysqld_pid_file_path=/linux0224/mysql_${port}/mysqld_${port}.pid

# 启动mysqld服务端的入口命令
start(){
if [ ! -e "$mysql_sock" ];then
    printf "Starting MySQL...\n"
    #  mysql的启动逻辑
    # mysqld_safe 脚本 >  mysqld 脚本 > 运行mysql进程
  
    /bin/sh ${Cmdpath}/mysqld_safe --defaults-file=/etc/mysql_${port}.cnf --pid-file=$mysqld_pid_file_path 2>&1 > /dev/null &
    sleep 3
else
    printf "MySQL is running...\n"
    exit 1
fi
}


stop(){
    if [ ! -e "$mysql_sock" ];then
        printf "MySQL is stopped...\n"
        exit 1
    else
        printf "Stoping MySQL...\n"
        mysqld_pid=`cat "$mysqld_pid_file_path"`
    if (kill -0 $mysqld_pid 2>/dev/null)
        then
        kill $mysqld_pid
        sleep 2
        fi
    fi
}



restart(){
    printf "Restarting MySQL...\n"
    stop
    sleep 2
    start
}



case "$1" in
start)
    start
;;
stop)
    stop
;;
restart)
    restart
;;
*)
    printf "Usage: /data/${port}/mysql{start|stop|restart}\n"
esac
EOF

4启动多实例

# 查看已有的3306实例    systemctl start mysqld
[root@tech-db-51 /linux0224]#netstat -tunlp|grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      2018/mysqld     


# 启动3307
[root@tech-db-51 /linux0224]#bash 3307.sh start
Starting MySQL...
Logging to '/linux0224/mysql_3307/mysql.log'.

[root@tech-db-51 /linux0224]#netstat -tunlp|grep mysql
tcp6       0      0 :::3306                 :::*                    LISTEN      2018/mysqld         
tcp6       0      0 :::3307                 :::*                    LISTEN      12514/mysqld   


# 启动3308
[root@tech-db-51 /linux0224]#bash 3308.sh start
Starting MySQL...
Logging to '/linux0224/mysql_3308/mysql.log'.

[root@tech-db-51 /linux0224]#netstat -tunlp|grep mysql
tcp6       0      0 :::3306                 :::*                    LISTEN      2018/mysqld         
tcp6       0      0 :::3307                 :::*                    LISTEN      12514/mysqld        
tcp6       0      0 :::3308                 :::*                    LISTEN      12700/mysqld  

检查3个实例的pid文件,socket文件

# pid文件 ,3个实例的
[root@tech-db-51 /linux0224]#find . -name '*.pid'
./mysql_3306/tech-db-51.pid
./mysql_3307/mysqld_3307.pid
./mysql_3308/mysqld_3308.pid

生产下的暗坑

[root@tech-db-51 /linux0224]#systemctl start mysqld

[root@tech-db-51 /linux0224]#bash /linux0224/3307.sh start
Starting MySQL...

[root@tech-db-51 /linux0224]#find / -name '*.sock' |xargs -i ls -l {}
srwxrwxrwx 1 mysql mysql 0 Jul 28 15:00 /tmp/mysql.sock
srwxrwxrwx 1 mysql mysql 0 Jul 28 15:00 /linux0224/mysql_3307/mysql.sock
srwxrwxrwx 1 mysql mysql 0 Jul 28 14:55 /linux0224/mysql_3308/mysql.sock

有些程序,不专业的程序员,会清空/tmp下的数据

# mysql的链接有的链接方式是走 sock文件的,因此sock文件不得删除,导致无法链接

# 建议,sock文件,别放入/tmp目录

设置多实例的密码

3实例,

# mysqladmin和mysql一样,也是客户端链接命令
# 精确定位 每一个实例
# ip:port
# socket


mysqladmin -uroot -p   password  新的密码


# ==================3306=========
# socket修改
# -u账户
# -p密码 ,啥也没写,会交互式提示让你输入

mysqladmin -uroot -p   -S /tmp/mysql.sock  password linux0224
# 还要再改3306的密码
# -p后面建议别跟上密码,因为history能看到密码记录
# mysql也给你提示不安全
mysqladmin -uroot -plinux0224 -S /tmp/mysql.sock password  linux3306


# ==================3307=========

mysqladmin -uroot -p -S /linux0224/mysql_3307/mysql.sock password  linux3307


# ==================3308=========

mysqladmin -uroot -p -S /linux0224/mysql_3308/mysql.sock password  linux3308

登录多实例

  • ip:port方式
[root@tech-db-51 /linux0224]#mysql -hlocalhost -P3306   -uroot -plinux3306 -e "show global variables like 'port';"
mysql: [Warning] Using a password on the command line interface can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+


# 3307 ,mysql的用户远程链接,权限问题

[root@tech-db-51 /linux0224]#mysql -uroot -plinux3307 -h127.0.0.1 -P3307   -e "show global variables like 'port';"
mysql: [Warning] Using a password on the command line interface can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3307  |
+---------------+-------+


[root@tech-db-51 /linux0224]#mysql -uroot -plinux3308 -h127.0.0.1 -P3308   -e "show global variables like 'port';"
mysql: [Warning] Using a password on the command line interface can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3308  |
+---------------+-------+
  • sock文件方式
mysql -uroot -plinux3308 -S /linux0224/mysql_3308/mysql.sock  -e "show global variables like 'port';"


mysql -uroot -plinux3307 -S /linux0224/mysql_3307/mysql.sock  -e "show global variables like 'port';"

mysql -uroot -plinux3306 -S /tmp/mysql.sock  -e "show global variables like 'port';"

标签:51,安装,linux0224,db,实例,tech,mysql,root
From: https://www.cnblogs.com/btcm409181423/p/18327140

相关文章

  • MySQL索引
    索引的引入在数据库表中,查询某条数据记录通常就是遍历,遍历表中所有的数据,然后一条一条比对,因此注定它是O(N)的时间复杂度。由于数据库的数据是存储在磁盘上的,必然要进行大量IO数据的读取,冯诺依曼体系告诉我们,对磁盘数据的读取效率是远低于与内存中数据的,尽管存在局部性原理,O(N......
  • ComfyUI进阶:Comfyroll节点 (最终篇)+应用实例
    前言:学习ComfyUI是一场持久战,而Comfyroll是一款功能强大的自定义节点集合,专为ComfyUI用户打造,旨在提供更加丰富和专业的图像生成与编辑工具。借助这些节点,用户可以在静态图像的精细调整和动态动画的复杂构建方面进行深入探索。Comfyroll的节点设计简洁易用,功能强大,是每个希望......
  • 如何修复 Google Colab 中未安装 Drive 和未正确设置路径的问题?
    我是Python新手,没有GoogleColab高级技术的经验。我一直在尝试编写一个Python代码,我想从我的GoogleDrive读取文本文件或MATLAB变量。然后我会对这些数据进行分析。我按照这个LINK的答案来安装我的驱动器。我在下面提供我的代码和屏幕截图来详细说明。我想要......
  • 在 FastAPI 中更改来自 MySQL 的数据类型输入
    我的这一行有“serialize_response”错误:@app.get("/get-sensors/",response_model=List[Data])和这个:return{"status":"success","list":data}我该如何解决这个问题!我想获取字典类型的数据为了解决在FastAPI中更改来自MySQL的数据类型输入时遇到的......
  • Navicat premium最新【16/17 版本】安装下载教程,图文步骤详解(超简单,一步到位,免费下载
    文章目录软件介绍软件下载安装步骤激活步骤软件介绍Navicat是一款快速、可靠且功能全面的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设计。以下是对Navicat的详细介绍:一、产品概述开发目的:Navicat旨在通过其直观和设计完善的用户界面,帮助数据库管......
  • 为什么我检查了 numpy、scikitlearn 和 scipy 的版本号却无法安装 NLTK?
    我运行了代码importnltkfromnltk.stemimportPorterStemmerfromnltk.tokenizeimportword_tokenizenltk.download('punkt')如果我运行我的代码,我会看到以下内容:File"sklearn/utils/murmurhash.pyx",line1,initsklearn.utils.murmurhashValueError:nu......
  • 基于YOLOv9的停车场空闲车位检测【python源码+UI界面+数据集+模型+语音报警+安装说明
    往期精品导航基于YOLOv9的脑肿瘤区域检测智慧课堂基于YOLOv8的学生上课行为检测基于YOLOv9+pyside的安检仪x光危险物物品检测(有ui)基于YOLOv9的PCB板缺陷检测基于YOLOv9的线路绝缘子缺陷检测【python源码+UI界面+数据集+模型+语音报警+安装说明】基于YOLOv9的道路状况检测【......
  • 【保姆级教程】油猴脚本的安装使用
    目录前言一、油猴简介1. 核心功能2. 应用场景3. 安全性与兼容性4. 社区生态二、教学开始(嫌麻烦直接目录跳转开始学习)1.插件安装(以MicrosoftEdge浏览器为例)2.获取脚本3.大展身手三、扩展(脚本编写)1.准备环境2.创建你的第一个脚本3.理解脚本结构4.进阶操......
  • 云服务器安装linux系统及部署宝塔面板教程(以雨云为例)
    雨云云服务器最近活动提示:        ①2核2G香港50M大带宽每月200G流量,月付价格原价33元可享首月5折优惠,年付价格原价396元可享全年7折优惠,约23元/月        ②购买后可享积分12%返利,相当于再打88折        ③还可以通过宝塔面板自动签到的方式获取积......
  • MySQL索引详解full-text,b-tree,hash,r-tree
    一、MySQL索引类型mysql里目前只支持4种索引分别是:full-text,b-tree,hash,r-treeb-tree索引应该是mysql里最广泛的索引的了,除了archive基本所有的存储引擎都支持它.1.full-text索引full-text在mysql里仅有myisam支持它,而且支持full-text的字段只有char、varchar、text数据类型......