如何在没有 root/su 的情况下在 CentOS 上安装 mySQL?

如何在没有 root/su 的情况下在 CentOS 上安装 mySQL?

我想在 CentOS 上安装 mySQL。

我在那台机器上没有 root 帐户。

如何在 CentOS 上安装 mySQL作为用户即无需 root 身份?

答案1

对于 RPM 软件包(CentOS 肯定是一个 RPM 系统),您需要以 root 身份运行 rpm 安装程序。RPM 安装程序需要写入一些软件包跟踪数据库,而您需要以 root 身份写入它们。好吧,mysql 允许您从 tarball 安装,对吧?(http://dev.mysql.com/doc/refman/5.0/en/binary-installation.html)。嗯,是的,但是您需要运行一个后续安装,并且需要以 root 身份运行。

除了转储文件之外,RPM 还可以有安装前和安装后的步骤。这些步骤可以是更改配置文件、添加/删除用户。通常,您可能需要以 root 身份执行这些操作。即使没有脚本,您通常也会安装到只有 root 才能安装的目录中。

在另一条评论中,您提到了您安装的其他不需要 root 权限的软件包。对于这些软件包,我确信:

  • 您是从 tarball 安装的,而不是 RPM 安装。
  • 你安装到了非系统目录
  • 代码不绑定到任何特定目录(某些代码是针对特定路径编译的)
  • 无需后续安装(无需系统配置/etc,也不需要像 MySQL 那样的新用户)

答案2

在没有 root 帐户的情况下在 CENTOS 上安装 MYSQL:

  1. 下载 MySQL 社区服务器 5.5.8 Linux - 通用压缩 TAR 存档 - [请注意,这不是源代码/二进制文件,而是通用 Linux(非 RPM 包)]
  2. 解压。例如:/home/martin/mysql
  3. 在您的主目录中创建my.cnf文件。文件内容应为:

    [server]
    user=martin
    basedir=/home/martin/mysql
    datadir=/home/martin/sql_data
    socket=/home/martin/socket
    port=3666
    
  4. 进入/home/martin/mysql目录并执行:

    ./scripts/mysql_install_db --defaults-file=~/my.cnf --user=martin --basedir=/home/martin/mysql --datadir=/home/martin/sql_data --socket=/home/martin/socket
    

    请注意,--defaults-file必须是第一个参数,否则它将不起作用!这是 MySQL 的一个错误。

  5. 您的 MySQL 服务器已准备就绪。使用以下命令启动它:

    ./bin/mysqld_safe --defaults-file=~/my.cnf &
    

    连接到服务器:

    mysql -h 127.0.0.1 -P 3666 -u root -p (using tcp)
    

    或者

    mysql --socket=/home/martin/socket -u root -p (using unix socket)
    

    关闭服务器:

    mysqladmin -h 127.0.0.1 -P 3666 -u root shutdown(using tcp)
    

    或者

    mysqladmin --socket=/home/martin/socket -u root shutdown (using unix socket)
    

答案3

如果您有可用的编译器,您可以从主目录构建并运行它,但是为了在 Linux 上安装软件,您需要 root 访问权限。

答案4

马丁的回答对我有用。为了回应评论(由于权限问题,我无法发表评论):

要连接到服务器,您需要将 /home/martin/mysql/bin 目录(示例中为 /home/martin/mysql/bin)添加到您的路径中,或者使用完整路径名来运行它:

/home/martin/mysql/bin/mysql --socket=/home/martin/socket -u root -p

另一个缺失的部分是设置 root 密码。执行 bin/mysqld_safe 步骤后(请参阅 Martin 的回复中的步骤 5),MySql 告诉我如何设置 root 密码。您需要执行该步骤,但要在命令行中添加 --socket=/home/martin/socket 选项。

相关内容