1.mysql的启动方式
a 日常启动,停止
mysql.server start ---> mysqld_safe ---> mysqld #sys-v的方式 mysql.server 脚本调用mysqld_safe然后再调用mysqld
mysql.service ---> mysqld #systemd的方式 mysql.service脚本直接调用mysqld
上面的方式都会去检查/etc/my.cnf的配置并读取并执行
b 维护性启动
mysqld_safe --skip-grant-tables --skip-networking &
一般会将需要的临时性的参数加到命令行中执行,此时也会读取/etc/my.cnf中的参数,但是如果这两者有冲突,则命令行中加的参数优先级最
高
实际上也可以使用 mysqld_safe & 来启动数据库, mysqladmin -uroot -p123 shutdown 来关闭数据库。
但实际上很少这么使用
2.初始化配置
a.作用
影响数据库的启动
影响客户端的功能
b.初始化配置的方法
初始化配置文件(如:/etc/my.cnf)
启动命令行上进行设置(如:mysqld_safe)
预编译时设置(仅限于编译安装时设置)
c.初始化配置文件的书写格式
[标签]
xxx=xxx
d.配置文件标签的归类
影响到服务器端有
[mysqld]
[mysqld_safe]
[server]可以概括mysqld 和 mysqld_safe
影响到客户端的有
[mysql]
[mysqladmin]
[mysqldump]
[client]可以概括mysql mysqladmin mysqldump
不推荐使用 server client 这种概括的方式去写配置文件
e.配置文件的模板
[mysqld]
user=mysql
basedir=/application/mysql #软件安装目录
datadir=/data/mysql/data #数据存放位置
socket=/tmp/mysql.sock #socket存放位置
server_id=6 #id号,主从复制时使用,范围(1-65535)
port=3306
[mysql]
socket=/tmp/mysql.sock #需和mysqld中的位置一致
f.mysqld_safe 与 mysqld的区别
mysqld_safe是服务端工具,用于启动mysqld,并且是mysqld的守护进程,mysqld_safe加&在后台运行$BASEDIR/bin/mysqld_safe &
因为mysqld_safe是mysqld的守护进程,所以mysqld_safe脚本会在启动MySQL服务器后继续监控其运行情况,并在其死机时重新启动它。
g.配置文件的读取顺序
[root@localhost ~]# mysqld --help --verbose | grep my.cnf
/etc/my.cnf
/etc/mysql/my.cnf
/usr/local/mysql/etc/my.cnf
~/.my.cnf
配置文件读取顺序由上到下,如有冲突项,则最下面的配置文件优先级最高
[root@localhost ~]# vim .my.cnf
[mysqld]
socket=/tmp/aa.sock
[root@localhost ~]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS!
Starting MySQL. SUCCESS!
[root@localhost ~]# netstat -lnp | grep mysql
tcp6 0 0 :::3306 :::* LISTEN 2920/mysqld
unix 2 [ ACC ] STREAM LISTENING 46071 2920/mysqld /tmp/aa.sock
此时可发现sock文件的位置变成来/tmp/aa.sock
直接登录也会报错
[root@localhost ~]# mysql -uroot -p123
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
指定sock文件位置就可以登录了
[root@localhost ~]# mysql -uroot -p123 -S /tmp/aa.sock
一般不建议设置其他的配置文件,容易引起混乱,但是这是一个排错的思路,就是配置文件都是对的,但是依然不行,就要考虑是不是存在多
份配置文件来
h.强制使用指定的配置文件
维护性启动时可使用参数 --defaults-file=~/123.txt 让mysql只加载这一个文件
2.mysql的连接管理
mysql
tcp/ip mysql -uroot -p -h 192.168.56.11 -P3306
连接前要确认 root用户是否有授权连接192.168.56.11
socket mysql -uroot -p -S /tmp/mysql.sock
如何区分是socket登录还是tcp/ip登录,使用 show processlist即可查看
mysql> mysql> show processlist;
+----+------+---------------------+------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+---------------------+------+---------+------+----------+------------------+
| 6 | root | 192.168.56.11:38160 | NULL | Query | 0 | starting | show processlist |
+----+------+---------------------+------+---------+------+----------+------------------+
其中38160为连接到的线程
mysql> show processlist;
+----+------+-----------+------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------+------+---------+------+----------+------------------+
| 7 | root | localhost | NULL | Query | 0 | starting | show processlist |
+----+------+-----------+------+---------+------+----------+------------------+
1 row in set (0.00 sec)
localhost就是使用socket连接的
3.多实例
先搭建多实例环境
创建文件夹
[root@localhost ~]# mkdir -p /data/330{7,8,9}/data
[root@localhost ~]# tree /data
/data
├── 3307
│ └── data
├── 3308
│ └── data
├── 3309
└── data
先写3份配置文件
cat > /data/3307/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/3307/data
socket=/data/3307/mysql.sock
log_error=/data/3307/mysql.log
port=3307
server_id=7
log_bin=/data/3307/mysql-bin
EOF
cat > /data/3308/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/3308/data
socket=/data/3308/mysql.sock
log_error=/data/3308/mysql.log
port=3308
server_id=8
log_bin=/data/3308/mysql-bin
EOF
cat > /data/3309/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/3309/data
socket=/data/3309/mysql.sock
log_error=/data/3309/mysql.log
port=3309
server_id=9
log_bin=/data/3309/mysql-bin
EOF
接下来初始化数据
mv /etc/my.cnf /etc/my.cnf.bak
mysqld --initialize-insecure --user=mysql --datadir=/data/3307/data --basedir=/application/mysql
mysqld --initialize-insecure --user=mysql --datadir=/data/3308/data --basedir=/application/mysql
mysqld --initialize-insecure --user=mysql --datadir=/data/3309/data --basedir=/application/mysql
配置启动脚本
cd /etc/systemd/system
cp mysqld.service mysqld3307.service
cp mysqld.service mysqld3308.service
cp mysqld.service mysqld3309.service
[root@localhost system]# vim mysqld3307.service
ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
[root@localhost system]# vim mysqld3308.service
ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
[root@localhost system]# vim mysqld3309.service
ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf
授权&启动
[root@localhost system]# chown -R mysql.mysql /data/*
[root@localhost system]# systemctl start mysqld3307.service
[root@localhost system]# systemctl start mysqld3308.service
[root@localhost system]# systemctl start mysqld3309.service
验证
[root@localhost system]# netstat -nlp | grep 330
tcp6 0 0 :::3306 :::* LISTEN 3213/mysqld
tcp6 0 0 :::3307 :::* LISTEN 3828/mysqld
tcp6 0 0 :::3308 :::* LISTEN 3722/mysqld
tcp6 0 0 :::3309 :::* LISTEN 3756/mysqld
unix 2 [ ACC ] STREAM LISTENING 56991 3756/mysqld /data/3309/mysql.sock
unix 2 [ ACC ] STREAM LISTENING 57170 3828/mysqld /data/3307/mysql.sock
unix 2 [ ACC ] STREAM LISTENING 59381 3722/mysqld /data/3308/mysql.sock
[root@localhost system]# mysql -S /data/3307/mysql.sock -e "select @@server_id"
+-------------+
| @@server_id |
+-------------+
| 7 |
+-------------+
[root@localhost system]# mysql -S /data/3308/mysql.sock -e "select @@server_id"
+-------------+
| @@server_id |
+-------------+
| 8 |
+-------------+
[root@localhost system]# mysql -S /data/3309/mysql.sock -e "select @@server_id"
+-------------+
| @@server_id |
+-------------+
| 9 |
+-------------+
如果要连接的话使用sock文件连接即可
[root@localhost ~]# mysql -S /data/3307/mysql.sock
4.mysql的内置功能
a.连接数据库
-u
-p
-S
-h
-P
-e 免交互执行sql
< 恢复数据使用
eg:
mysql -uroot -p -S /tmp/mysql.sock #使用本地socket文件连接
mysql -uroot -p -h10.0.0.1 -P3306 #连接远程主机
mysql -uroot -p -e "show databases;" #直接执行sql语句
mysql -uroot -p123 world < world.sql #恢复备份
b.内置命令
help 打印帮助
ctrl +d 退出mysql
\G 格式化输出 select * from mysql.user\G;
source 导入文件
mysql> use world
source /root/world.sql
附
用MySQL的source命令导入SQL文件实战记录。
进入 CMD
执行 mysql -uroot -p 输入密码后进入 MySQL 命令提示符
依次执行:
use XXXdatabase;
set charset utf8;
source d:/xxx.sql;
本以为这样就可以挂机等待 sql 文件如期导入了,但是事与愿违,当过一段时间在打开时发现命令行提示链接超时,等待重新链接。
这时候需要再执行以下 sql:
set global max_allowed_packet=100000000;
set global net_buffer_length=100000;
set global interactive_timeout=28800000;
set global wait_timeout=28800000;
以上语句的解释:
max_allowed_packet=XXX 客户端/服务器之间通信的缓存区的最大大小
net_buffer_length=XXX TCP/IP 和套接字通信缓冲区大小,创建长度达 net_buffer_length 的行
interactive_timeout 对后续起的交互链接有效时间
wait_timeout 对当前交互链接有效时间。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)