背景:需要在linux下运行一个绿色版内存mysql
下载 mariadb-13.2.0-linux-systemd-x86_64.tar.gz
https://mirrors.aliyun.com/mariadb/mariadb-13.2.0/bintar-linux-systemd-x86_64/
改造为绿色版
1、在解压后的目录下,创建这个目录
mkdir empty-data
2、写一个完全本地化的 my.cnf,所有路径都用相对路径
bash
mariadb-13.2.0-linux-systemd-x86_64$ cat my.cnf
[mysqld]
basedir = ./
datadir = ./empty-data
port = 3306
bind-address = 0.0.0.0
character-set-server = utf8mb4
# 彻底关闭所有持久化引擎和日志
skip-innodb
default-storage-engine = MEMORY
skip-log-bin
general_log = OFF
slow_query_log = OFF
performance_schema = OFF
# 适配多连接 OLTP
max_connections = 100
max_heap_table_size = 64M
tmp_table_size = 64M
# socket 和 pid 文件全放在本地目录,不碰系统路径
socket = ./mysql.sock
pid-file = ./mysqld.pid
3、写一个启动脚本
bash
mariadb-13.2.0-linux-systemd-x86_64$ cat run.sh
#!/bin/bash
# 清空旧数据,保证每次启动都是全新纯内存环境
rm -rf ./empty-data/*
# 仅初始化最小系统表,所有元数据都放在本地目录
./scripts/mysql_install_db --user=$(whoami) --datadir=./empty-data --basedir=./ --skip-test-db --force
# 直接启动,不依赖系统服务
./bin/mysqld_safe --defaults-file=./my.cnf &
4、再写一个stop脚本
bash
mariadb-13.2.0-linux-systemd-x86_64$ cat stop.sh
#!/bin/bash
./bin/mysqladmin -u root -S ./empty-data/mysql.sock shutdown
sleep 2
rm -rf ./empty-data/* ./mysql.sock ./mysqld.pid ./*.err
5、给脚本增加执行权限
6、启动mysql
./run.sh
6、登陆测试
bash
./run.sh 会删除empty-data目录
mysql/mariadb会进入出厂状态
此时数据库中的认证模式是密码认证,且密码为空。
MariaDB [(none)]> select host,user,plugin from mysql.user;
+-----------+--------------------+-----------------------
| Host | User | plugin
+-----------+--------------------+-----------------------
| localhost | mariadb.sys | mysql_native_password
| localhost | root | mysql_native_password
| localhost | abc@zzz.intra | mysql_native_password
+-----------+--------------------+-----------------------+
但tcp登陆方式的客户端不允许填写空密码,所以tcp登陆不进去
./bin/mariadb -u abc@zzz.intra -p -h 127.0.0.1 -P 3306
只能用操sockt方式登陆,输入空密码即可
切换到root用户后执行 ./bin/mariadb -u root -p -S ./empty-data/mysql.sock
切换到abc@zzz.intra用户后执行 ./bin/mariadb -u abc@zzz.intra -p -S ./empty-data/mysql.sock
下面这种不输入密码也可以
./bin/mariadb -u abc@zzz.intra -S ./empty-data/mysql.sock