03@mysql体系结构管理及mysql多实例部署

1|0mysql体系结构管理

2|0一、mysql体系结构

2|11、客户端与服务器模型

1|01)mysql是一个典型的C/S服务结构

1.mysql自带的客户端程序(/service/mysql/bin) mysql mysqladmin mysqldump 2.mysqld一个二进制程序,后台的守护进程 单进程 多线程

在这里插入图片描述

1|02)MySQL的两种连接方式

1.TCP/IP的连接方式 2.套接字连接方式,socket连接 #查看连接方式 mysql> status; -------------- Connection: Localhost via UNIX socket 3.举例: 3.1.TCP/IP连接 mysql -uroot -p -h127.0.0.1 mysql -uroot -p -h127.0.0.1 -S /tmp/mysql.sock 3.2.socket连接 mysql -uroot -p -hlocalhost mysql -uroot -p123(默认连接方式,socket) 4.注意: 4.1.因为使用TCP/IP连接,需要建立三次握手 4.2.不一定-h都是tcp,-hlocalhost是socket连接

1|03)MySQL服务构成

在这里插入图片描述

2|22、mysql体系基本管理

1|01)MySQL管理

#启动MySQL [root@hzl ~]# ps aux |grep mysqld |grep -v grep #查看进程,mysqld_safe为启动mysql的脚本文件,内部调用mysqld命令 mysql 3329 0.0 0.0 113252 1592 ? Ss 16:19 0:00 /bin/sh /usr/bin/mysqld_safe --basedir=/usr mysql 3488 0.0 2.3 839276 90380 ? Sl 16:19 0:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sock [root@hzl ~]# netstat -an |grep 3306 #查看端口 tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN [root@egon ~]# ll -d /var/lib/mysql #权限不对,启动不成功,注意user和group drwxr-xr-x 5 mysql mysql 4096 Jul 20 16:28 /var/lib/mysql #小插曲 安装完mysql 之后,登陆以后,不管运行任何命令,总是提示这个 mac mysql error You must reset your password using ALTER USER statement before executing this statement. #解决方法: step 1: SET PASSWORD = PASSWORD('your new password'); step 2: ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER; step 3: flush privileges;

1|02)密码设置

#初始状态下,管理员root,密码为空,默认只允许从本机登录localhost [root@hzl ~]# mysql #默认密码为空,可直接输入mysql登录 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.6.46 Source distribution ....... .... Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> #设置MySQL密码 [root@hzl ~]# mysqladmin -uroot password "1" #设置初始密码 [root@hzl ~]# mysqladmin -uroot -p"1" password "123" #修改mysql密码,必须输入原密码才能设置新密码 #登录命令格式: [root@hzl ~]# mysql -h192.168.15.52 -uroot -p123 #远程登录 [root@hzl ~]# mysql -uroot -p123 #本地登录方式 [root@hzl ~]# mysql #以root用户登录本机,首次登录密码为空,无需输入密码

1|03)忘记密码(重置密码)

#方式一:(不建议使用,简单粗暴) [root@hzl ~]# rm -rf /var/lib/mysql/mysql #删除所有授权信息全部丢失!!! [root@hzl ~]# systemctl restart mysql #重新启动 [root@hzl ~]# mysql #方式二:(修改配置文件,启动时,跳过授权库) [root@hzl ~]# vim /etc/my.cnf #mysql主配置文件 [mysqld] skip-grant-table #添加此参数,表示跳过密码认证 [root@hzl ~]# systemctl restart mysql [root@hzl ~]# mysql #登录时,直接可以登录 MariaDB [(none)]> update mysql.user set password=password("123") where user="root" and host="localhost"; #进入MySQL,使用此命令进行重置密码 mysql> flush privileges; #刷新权限 mysql> q\ [root@hzl ~]# #打开/etc/my.cnf去掉skip-grant-table,然后重启 [root@hzl ~]# systemctl restart mysql [root@hzl ~]# mysql -u root -p123 #以新密码登录

1|04)统一字符编码( utf8mb4支持表情字符)

1》#设置数据库字符编码为utf8mb4_general_ci #设置相应表字段字符编码为utf8mb4_general_ci 2》#设置my.cnf增加以下配置信息 [client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld] character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4' 3》#重启MySQL 保存表情数据查看数据库就可以看到数据库中有表情字符的存在 mysql数据库怎么存入emoji表情

3|0二、mysql服务构成

3|11.实例

1.MySQL的后台进程+线程+预分配的内存结构。 2.MySQL在启动的过程中会启动后台守护进程,并生成工作线程,预分配内存结构供MySQL处理数据使用。 1.什么是实例? 一个进程 + 多个线程 + 预分配内存空间 2.多实例? 多个进程 + 多个线程 + 多个预分配的内存空间

3|22.mysqld服务器程序构成

mysqld是一个守护进程但是本身不能自主启动 [root@db04 ~]# /etc/init.d/mysqld start

1|01)连接层

1.验证用户的合法性 2.提供两种连接方式(TCP/IP socket) 3.建立一个与SQL层交互的线程

1|02)sql层

1.接收连接层传来的SQL语句 2.验证语法 3.验证语义(DML,DDL,DCL,DQL) 检查你输入的SQL语句是 select insert update delete... grant 4.解析器:解析你的SQL语句,生成多种执行计划 5.优化器:接收解析器传来的多种执行计划,选择最优的一种 6.执行器:将优化器选择出的最优的SQL,执行 6.1 建立一个与存储引擎层 交互的线程 6.2 将执行语句交给存储引擎层,取数据 接收存储引擎层,结构化成表的数据结果 7.如果你的前端有缓存,写缓存 8.记录日志(binlog)

1|03)存储引擎层

1.接收到SQL层传来的SQL语句 2.与磁盘交互,取数据,结构化成表的形式,返回给SQL层 3.建立一个与SQL层交互的线程

4|0三、mysql相关命令

4|11.启动数据库

/etc/init.d/mysqld start ------> mysql.server ------> mysqld_safe ------> mysqld systemctl start mysql ------> mysqld_safe ------> mysqld mysqld_safe --defaults-file=/etc/my.cnf ------> mysqld_safe ------> mysqld

4|22.停止数据库

/etc/init.d/mysqld stop systemctl stop mysqld mysqladmin -uroot -p123 shutdown #不建议使用 kill -9 pid killall mysqld pkill mysqld #出现问题: 1)如果在业务繁忙的情况下,数据库不会释放pid和sock文件 2)号称可以达到和Oracle一样的安全性,但是并不能100%达到 3)在业务繁忙的情况下,丢数据(补救措施,高可用)

4|33、设置密码

1)mysqladmin -uroot -p123 password '1' 2)update mysql.user set password=password('123') where user='root' and host='localhost'; 3)set password=password('1'); #修改当前用户的密码 4)grant all on *.* to 'root'@'localhost' identified by '123';

5|0四、mysql连接管理

1|01、mysql自带的连接命令 mysql

mysql #常见的特定于客户机的连接选项: -u: 指定用户 mysql -uroot -p: 指定密码 mysql -uroot -p567 -h: 指定主机域 mysql -uroot -p567 -h127.0.0.1 -P: 指定端口 mysql -uroot -p567 -h127.0.0.1 -P3307 -S: 指定socket文件 mysql -uroot -p567 -S /tmp/mysql.sock -e: 指定SQL语句(库外执行SQL语句) mysql -uroot -p567 -e "show databases;" #--protocol: 指定连接方式 mysql --protocol=TCP --protocol=socket

1|02、第三方的连接工具

1.sqlyog 2.navicat #注意:数据库是没有外网的,想连接可以使用通道 3.heidisql 4.应用程序连接MySQL #注意:需要加载对应语言程序的API

6|0五、mysql多实例部署

用户配置多实例主从部署

NGINX多实例就是多个配置文件 mysql多实例: 1.多个数据目录 2.多个端口 3.多个socket文件 4.多个日志文件

6|11.创建多个数据目录

[root@db01 ~]# mkdir -p /data/{3307,3308,3309}

6|22.准备多个配置文件

[root@db01 data]# vim /data/3307/my.cnf [mysqld] basedir=/service/mysql datadir=/data/3307/data port=3307 socket=/data/3307/mysql.sock log-error=/data/3307/data/mysql.err log-bin=/data/3307/data/mysql-bin server_id=7 ------------------------------------------- [root@db01 data]# vim /data/3308/my.cnf [mysqld] basedir=/service/mysql datadir=/data/3308/data port=3308 socket=/data/3308/mysql.sock log-error=/data/3308/data/mysql.err log-bin=/data/3308/data/mysql-bin server_id=8 -------------------------------------------- [root@db01 data]# vim /data/3309/my.cnf [mysqld] basedir=/service/mysql datadir=/data/3309/data port=3309 socket=/data/3309/mysql.sock log-error=/data/3309/data/mysql.err log-bin=/data/3309/data/mysql-bin server_id=9

6|33.初始化多套数据目录

############(mysql-5.6)############ [root@db01 scripts]# ./mysql_install_db --defaults-file=/data/3307/my.cnf --user=mysql --basedir=/service/mysql --datadir=/data/3307/data [root@db01 scripts]# ./mysql_install_db --defaults-file=/data/3308/my.cnf --user=mysql --basedir=/service/mysql --datadir=/data/3308/data [root@db01 scripts]# ./mysql_install_db --defaults-file=/data/3309/my.cnf --user=mysql --basedir=/service/mysql --datadir=/data/3309/data #使用tree可以查看 [root@db01 scripts]# tree -L 3 /data ############(mysql-5.7)############ [root@db02 bin]#cd /service/mysql/bin [root@db02 bin]# /service/mysql/bin/mysql_install_db --defaults-file=/data/3307/my.cnf --user=mysql --basedir=/service/mysql --datadir=/data/3307/data ........ ... ###同上!!!

6|44.授权目录

[root@db01 scripts]# chown -R mysql.mysql /data

6|55.启动数据库

############(mysql-5.6)############ [root@db01 scripts]# mysqld_safe --defaults-file=/data/3307/my.cnf & [root@db01 scripts]# mysqld_safe --defaults-file=/data/3308/my.cnf & [root@db01 scripts]# mysqld_safe --defaults-file=/data/3309/my.cnf & ############(mysql-5.7)############ [root@db02 bin]#cd /service/mysql/bin [root@db02 bin]#/service/mysql/bin/mysqld_safe --defaults-file=/data/3309/my.cnf & ........ ... ###同上!!!

6|66.检查启动

[root@db01 scripts]# netstat -lntup|grep 330 tcp6 0 0 :::3307 :::* LISTEN 25550/mysqld tcp6 0 0 :::3308 :::* LISTEN 25722/mysqld tcp6 0 0 :::3309 :::* LISTEN 25894/mysqld

6|77.使用SystemCtl管理启动

cat >/etc/systemd/system/mysqld3307.service <<EOF [Unit] Description=MySQL Server Documentation=man:mysqld(8) Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html After=network.target After=syslog.target [Install] WantedBy=multi-user.target [Service] User=mysql Group=mysql ExecStart=/service/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf LimitNOFILE = 5000 EOF cat >/etc/systemd/system/mysqld3308.service <<EOF [Unit] Description=MySQL Server Documentation=man:mysqld(8) Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html After=network.target After=syslog.target [Install] WantedBy=multi-user.target [Service] User=mysql Group=mysql ExecStart=/service/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf LimitNOFILE = 5000 EOF cat >/etc/systemd/system/mysqld3309.service <<EOF [Unit] Description=MySQL Server Documentation=man:mysqld(8) Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html After=network.target After=syslog.target [Install] WantedBy=multi-user.target [Service] User=mysql Group=mysql ExecStart=/service/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf LimitNOFILE = 5000 EOF #使用systemctl启动mysql systemctl start mysqld3307 systemctl start mysqld3308 systemctl start mysqld3309

6|88.多实例设置密码

[root@db01 scripts]# mysqladmin -uroot -S /data/3307/mysql.sock password '3307' [root@db01 scripts]# mysqladmin -uroot -S /data/3308/mysql.sock password '3308' [root@db01 scripts]# mysqladmin -uroot -S /data/3309/mysql.sock password '3309'

6|99.多实例验证

[root@db01 scripts]# mysql -uroot -p3307 -S /data/3307/mysql.sock -e "show variables like 'server_id';" Warning: Using a password on the command line interface can be insecure. +---------------+-------+ | Variable_name | Value | +---------------+-------+ | server_id | 7 | +---------------+-------+ [root@db01 scripts]# mysql -uroot -p3308 -S /data/3308/mysql.sock -e "show variables like 'server_id';" Warning: Using a password on the command line interface can be insecure. +---------------+-------+ | Variable_name | Value | +---------------+-------+ | server_id | 8 | +---------------+-------+ [root@db01 scripts]# mysql -uroot -p3309 -S /data/3309/mysql.sock -e "show variables like 'server_id';" Warning: Using a password on the command line interface can be insecure. +---------------+-------+ | Variable_name | Value | +---------------+-------+ | server_id | 9 | +---------------+-------+

6|1010.连接多实例小技巧

[root@db01 scripts]# vim /usr/bin/mysql3309 mysql -uroot -p3309 -S /data/3309/mysql.sock [root@db01 scripts]# vim /usr/bin/mysql3308 mysql -uroot -p3308 -S /data/3308/mysql.sock [root@db01 scripts]# vim /usr/bin/mysql3307 mysql -uroot -p3307 -S /data/3307/mysql.sock [root@db01 scripts]# chmod +x /usr/bin/mysql*

6|1111、基础配置文件(优化字符设)

[root@db01 system]# cat /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci #skip-grant-table #跳过密码使用 # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Settings user and group are ignored when systemd is used. # If you need to run mysqld under a different user or group, # customize your systemd unit file for mariadb according to the # instructions in http://fedoraproject.org/wiki/Systemd [mysqld_safe] log-error=/var/log/mariadb/mariadb.log pid-file=/var/run/mariadb/mariadb.pid default-character-set=utf8mb4 # include all files from the config directory !includedir /etc/my.cnf.d #[client] #default-character-set=utf8mb4

7|0六、mysql多版本多实例部署

7|11、解压和软连接(5.6与5.7 )

[root@db01 opt]# ln -s /opt/mysql-5.7.30-linux-glibc2.12-x86_64 /usr/local/mysql57 [root@db01 opt]# ln -s /opt/mysql-5.6.46-linux-glibc2.12-x86_64 /usr/local/mysql56

7|22、创建目录及授权

mkdir -p /data/331{6..7}/data chown -R mysql. /data

7|33、编写配置文件

cat >/data/3316/my.cnf <<EOF [mysqld] user=mysql basedir=/usr/local/mysql56 datadir=/data/3316/data port=3316 socket=/tmp/mysql3316.sock EOF cat >/data/3317/my.cnf <<EOF [mysqld] user=mysql basedir=/usr/local/mysql57 datadir=/data/3317/data port=3317 socket=/tmp/mysql3317.sock EOF

7|44、初始化数据

/usr/local/mysql57/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql57 --datadir=/data/3317/data /usr/local/mysql56/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql56 --datadir=/data/3316/data

7|55、启动mysql

[root@db01 opt]# /usr/local/mysql56/bin/mysqld_safe --defaults-file=/data/3316/my.cnf & [root@db01 opt]# /usr/local/mysql57/bin/mysqld_safe --defaults-file=/data/3317/my.cnf &

7|66、 mysql连接

[root@db01 opt]# mysql -S /tmp/mysql3307.sock [root@db01 opt]# mysql -S /tmp/mysql3316.sock [root@db01 opt]# mysql -S /tmp/mysql3317.sock

__EOF__

本文作者ଲ小何才露煎煎饺
本文链接https://www.cnblogs.com/zeny/p/15121503.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   ଲ小何才露煎煎饺  阅读(80)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示