以非 root 身份初始化 MySQL 数据库并运行 SQL 服务器进行测试

以非 root 身份初始化 MySQL 数据库并运行 SQL 服务器进行测试

我想进行一些特定于 MySQL 的测试,需要以非 root 用户身份运行全新的 MySQL 数据库。我使用的是 Debian Linux,希望能够mysql_install_db以普通用户身份使用正确的选项和可写位置启动和其他命令。

  1. 这有用吗?

  2. 怎么做?

我不想从 MySQL 网站下载软件。相反,我想使用已安装的 OS 软件包提供的可执行文件。理由如下:

  1. 该软件已经安装 - 从网络安装新软件是没有意义的,很慢,可能会失败,可能存在安全风险等。据我所知,KDE 正在为其数据存储做类似的事情。

  2. 如果它最终确实起作用,我想将测试包装在一个可移植的脚本中,该脚本可以在任何mysql_install_db可用的计算机上运行。

我在网上搜索教程/提示,但只找到大量关于如何从头开始安装软件的描述。根据我读到的信息,我尝试了以下方法:

mkdir ~/tmp/mysql/
mkdir ~/tmp/mysql/mysql/
mkdir ~/tmp/mysql/sql_data/

mysql_install_db \
    --defaults-file=my.cnf
    --user=daniel
    --basedir=/home/daniel/tmp/mysql/mysql/
    --datadir=/home/daniel/tmp/mysql/sql_data/
    --socket=/home/daniel/tmp/mysql/socket

但它抱怨道:

FATAL ERROR: Could not find my_print_defaults

The following directories were searched:

   /home/daniel/tmp/mysql/mysql//bin
   /home/daniel/tmp/mysql/mysql//extra

更新:我仍然没有找到将输出限制为错误消息的解决方案。我得到了很多带有标签的行[Note],但没有找到设置调试输出级别的参数。

答案1

我在 Akonadi 代码中找到了类似的调用,并开始从头开始构建命令,同时查阅了相应的帮助文本。看起来我之前只是添加了无用/适得其反的选项。这现在对我来说确实有效:

mysql_install_db                    \
  --defaults-file=/dev/null         \ # don't user my.cnf in /etc/ or ~/
  --datadir=/home/daniel/tmp/mysql/ \ # use given directory for data
  --force                             # make mysqld work without /usr/bin/resolveip

我似乎只需要 1 个目录来存放数据。basedir仅当您提供完整的 MySQL 安装时,设置才有效。

此后我可以运行 MySQL 服务器:

mysqld                              \
  --defaults-file=/dev/null         \ # as above
  --datadir=/home/daniel/tmp/mysql/ \ # as above
  --socket=/home/daniel/tmp/socket  \ # use writable socket
  --skip-networking                   # for my purposes: only socket connections

相关内容