开发者日常就是需要面对各种各样的数据库,甚至有的开发者需要面对同样的产品不同版本的数据库,而且希望数据库软件不会影响到系统,如果是通过可执行文件进行安装的数据库软件,在安装多个版本的数据时候可能会出现一些版本冲突的情况,甚至是软件安装覆盖的问题。还有一个困扰就是我可能需要多个数据库实例,而且每个实例互不影响。那么本文的方法都是可以解决以上问题的。

1. 介绍

那么什么是 “便携式 MySQL” 呢?其实本文笔者写笔记的时候用的是 “Portable MySQL” 的标题。但还是更喜欢这个标题吧。便携式的意思就是软件不会与系统有太多的依赖。比如我在A机器上运行了一个 MySQL,但是我现在想把数据库迁移到另一台机器上,那么便携式在这件事情上的优点就是我们能够直接复制对应的数据目录到新的机器上就可以直接恢复运行了。而且还有一个优点就是便携式 MySQL 能够很方便的进行安装、卸载、迁移。这些优点都是现在软件开发中有关效率与安全性非常重要的。

2. 下载并安装

本文使用到的所有 MySQL 可执行文件都是可以在 MySQL 官网(https://dev.mysql.com/downloads/mysql/)进行下载的。

那么笔者下载的是 mysql-8.0.22-macos10.15-x86_64.tar.gz ,下载后解压并将其放至 /Users/ismdeep/Apps/mysql-8.0.22-macos10.15-x86_64

3. 创建存放 MySQL 数据的文件夹

创建一个空文件夹 /Users/ismdeep/Data/rawdata

该文件夹将用来保存 MySQL 数据库的数据,如果需要进行迁移则在数据库关闭之后复制这个文件夹即可。那如果需要启动新的数据库实例,则需要新建另一个数据库文件夹并按照以下步骤进行初始化数据库即可。

4. 初始化数据库

首先对空白的文件夹进行数据库初始化。

mysqld --initialize \
       --user=mysql \
       --basedir=/Users/ismdeep/Apps/mysql-8.0.22-macos10.15-x86_64 \
       --datadir=/Users/ismdeep/Data/rawdata

MySQL 8.0 默认使用的数据库密码是由 MySQL 自动随机生成的,这个密码会出现在以上命令执行的输出上。如果没有出现则会保存在数据文件夹中的后缀为 .err 的文件中。

5. 启动数据库

mysqld --basedir=/Users/ismdeep/Apps/mysql-8.0.22-macos10.15-x86_64 \
       --datadir=/Users/ismdeep/Data/rawdata

mysqld 命令常用参数说明:

  • --daemonize 后台守护进程模式
  • --bind-address=<address> 绑定访问地址

6. 修改 root 密码

在以上重新启动数据库之后首先要做的就是修改 root 密码。运行以下命令并输入上述所说随机初始化的密码。

$ mysql -uroot -p -h127.0.0.1
Enter password:

接下来修改密码,这里为了方便叙述就使用 123456 作为密码,当然笔者非常不建议大家这样用,因为这样的密码太过简单。

mysql> alter user user() identified by '123456';
Query OK, 0 rows affected (0.00 sec)

需要开启远程访问则增加以下命令(当然以上 --bind-address 参数也是需要设置的):

CREATE USER 'root'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

7. 关闭服务器命令

mysqladmin -uroot -p123456 shutdown

8. alias 小技巧

笔者觉得以上启动服务器和关闭服务器命令太麻烦了。所以会使用以下两个 alias 来简化。

alias mysql-start="mysqld --daemonize --basedir=/Users/ismdeep/Apps/mysql-8.0.22-macos10.15-x86_64 --datadir=/Users/ismdeep/Data/rawdata"
alias mysql-stop="mysqladmin -uroot -pE0Lztvs238 shutdown"

这样启动服务器则使用 mysql-start ,关闭服务器则使用 mysql-stop 即可。