mysql安装和多实例管理

发布于:2025-06-12 ⋅ 阅读:(287) ⋅ 点赞:(0)

day85 mysql安装和多实例管理

使用mysql是不二的选择,直接学习就对了

为什么mysql用这么多

性能强悍,服务稳定,很少因为mysql自身的原因而宕机

开放源代码,社区很活跃,出问题可以很快得到答案

mysql软件提及优化了N次,安装包也很小,部署简单,配置很容易学,文档也多

mysql是世界上的公司的首要选择,

LNMP,LAMP,都是和mysql框架

mysql便于编程,基于,api直接获取数据,如java,php,python,golang 。。。。

版本的选择

企业版

这个肯定是要收费的

社区版

MySQL社区版则是由分散在世界各地的MySQL开发者、爱好者以及用户参与开发与测试的,包括软件代码的管理、测试工作,也是他们在负责。社区也会设立BUG汇报机制,收集用户在使用过程中遇到的BUG情况,相比于企业版,社区版的开发及测试环境没有那么严格。

选择哪一个

mysql是成熟产品,企业版和社区版在性能方面区别不大,对于我们学习而言,社区版即可。它们的区别可以如下了解

  • 企业版对代码的管理、测试更严格、稳定性更好
  • 企业版不遵循GPL开源协议,而社区版遵循,可以免费用
  • 企业版可以购买额外的收费服务,如7*24的技术支持,有钱任性。
  • 社区版的安全性,稳定性,无法像企业版有及时的维护、技术支持。

Mysql特点

支持多多种的操作系统,Windows,Macos,Linux 。。。。

支持多种语言,API 如C,C++,Python,Php, Java等,支持多线程,充分利用硬件资源,支持多种存储引擎

mysql就是一个基于socket编写的C/S架构的软件

客户端软件, mysql自带:如mysql命令,mysqldump命令等,Python模块如 pymysql.

mysql服务端和客户端

先看看什么是B/S 和 C/S架构

B/S架构是Browser/Server指浏览器和服务端,在客户机器不需要装软件,只需要装一个服务器。

C/S是Client/Server指客户端和服务器,在客户端上必须安装相对应的软件和相应的运行环境后,才能访问服务器

Mysql是基于客户端-服务器端的运行的数据库,服务端负责数据的处理,运行在数据库服务器上,

通过用户发送增删改查请求发送给客户端,然后通过网络提交到服务器,服务端收到请求后,在进行处理,然后返回。

服务端,客户端可以在不同的机器上,也可以在一台机器上,

这种服务端,客户端,就在生活中很常见,比如打游戏时的登录,qq,微信的登录,mysql也是一个登录的过程。

mysql下载选择

了解数据库后,我们可以下载mysql软件了

http://mirrors.sohu.com/mysql/

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

准备3个新的机器

  • db-51
  • db-52
  • db-53

我们会用到

或者自己用快照进行管理

mysql默认存放的目录/var/lib/mysql/*

mysql的多实例基于port区分多个mysql进程

主动修改mysql主程序的数据存放,提升数据目录的安全性

安装

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]#
[root@tech-db-51 /opt]#
[root@tech-db-51 /opt]#du -h
692M	.


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


# 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
[root@tech-db-51 /opt]#


# 操作 会玩 444


# 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/



配置文件

初始化完毕后,有配置文件即可正确启动,告诉 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




启动脚本

复制自带脚本即可

[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]#
[root@tech-db-51 /linux0224/mysql_3306]#
[root@tech-db-51 /linux0224/mysql_3306]#systemctl daemon-reload
[root@tech-db-51 /linux0224/mysql_3306]#
[root@tech-db-51 /linux0224/mysql_3306]#
[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)



登录

# 启动即可
[root@tech-db-51 /linux0224/mysql_3306]#systemctl start mysqld
[root@tech-db-51 /linux0224/mysql_3306]#
[root@tech-db-51 /linux0224/mysql_3306]#
[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多实例管理-------------------

mysql多实例管理

前面已经针对mysql数据库进行介绍,并且说明了为什么选择Mysql数据库,以及MYsql数据库在linux系统下的多种安装方式,同时以单实例讲解了如何编译安装Mysql和基础安全优化等内容,

讲解Mysql多实例安装,百度,淘宝,新浪微博,无一例外的使用这种方式部署数据库。

单实例,也就是我们在一台linux上,某个目录上,启动这个mysql,这就表示,这个机器上,有单独的一个mysql个体,一个实例。

什么是多实例

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

这3个mysql,就相当于设置有3个房间,设置了不同的端口,例如06,07.08.

运行3个数据库。


多实例的好处

可利用的服务器资源,单个服务器资源有剩余的时候,可以充分的利用剩余的资源提供更多的服务,且可以实现资源的隔离,就像docker

节约服务器资源,若公司的没钱,就可以使用这个技术手段。

多实例的弊端

其实就会大量的抢夺资源,cpu,内存,网络。。。。

导致服务器的反应降低。


Mysql多实例部署

创建数据目录

mkdir -p  /linux0224/mysql_3307

mkdir -p  /linux0224/mysql_3308


chown -R mysql.mysql /linux0224

初始化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登录

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

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

区别在参数

port

datadir

socket 进程套接字文件

链接mysql的俩方式,找到它   

进程
pid   
能链接程序的俩方式
1. 通过远程网络的链接形式,效率很低,网络波动,
ip:port   10.0.0.51:3306

mysql -uroot -p -h10.0.0.51  -P3306


--------------------------------
--------------------------------
--------------------------------

2. 通过再机器本地,进程套接字文件去链接,直接是基于内存的链接
程序和程序之间,直接走内存数据,效率极高,遇见一些软件的部署,走socket链接
如nginx的反向代理配置
proxy_pass  ip:port;
proxy_pass  unxi:socket;



/linux0224/mysql_3307/mysql.sock

# -S  等于 -h -P 

# 链接3307的进程
# 能看懂 程序链接的2方式
# 
mysql -uroot -p密码 -S  /linux0224/mysql_3307/mysql.sock
mysql -uroot -p密码 -S  /linux0224/mysql_3306/mysql.sock
mysql -uroot -p密码 -S  /linux0224/mysql_3308/mysql.sock
#

# 看懂刷222222


log目录

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@db-52 linux0224]# ls
mysql_3306  mysql_3307  mysql_3308

多实例脚本

有3个数据目录+ 3个独立的配置文件+ shell脚本 -=====3个运行程序

提供一个脚本模板,自己区分3个实例的端口,数据目录即可

生成 3307 和3308即可

cat > /linux0224/3307.sh <<'EOF'
port="3307"
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

启动多实例

# 启动这两个数据库
bash 3307.sh start
bash 3308.sh start

登录多实例

  • 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  |
+---------------+-------+

# 看懂基于 ip:port的链接多实例,刷33333


# ip:port有很多种规则
# 授权语法
#  locahost,  127.0.0.1   10.0.0.10


网站公告

今日签到

点亮在社区的每一天
去签到