3

I want to install mySQL on CentOS.

I do not have a root account on that machine.

How can I install mySQL on CentOS as a user, ie. without being root?

4 Answers 4

1

For RPM packages (and CentOS is certainly a RPM system) you need to be root to run the rpm installer. The RPM installer needs to write to some package tracking dbs, and you need to be root to write to them. OK, well, mysql allows you to install from a tarball, right? (http://dev.mysql.com/doc/refman/5.0/en/binary-installation.html). Well, yeah, but there's a postinstall that you'll need to run, that you'll need to be root to do.

RPMs can have pre-and postinstall steps outside of just dumping out files. these can be changing configuration files, adding/deleting users. In general you may need to be root to do these. Even without scripts, you generally install into directories that only root can install to.

In another comment, you mention other packages that you've installed that you didn't need to be root. For these packages I'm sure that:

  • You installed from a tarball, not an RPM.
  • You installed into a non-system dir
  • The code was not tied to any specific dir (some code is compiled for specific paths)
  • There was no postinstall needed (no system config in /etc, no new users like MySQL needs)
6

INSTALLING MYSQL ON CENTOS WITHOUT ROOT ACCOUNT:

  1. Download MySQL Community Server 5.5.8 Linux - Generic Compressed TAR Archive-- [Note this is not the source/binary but a generic Linux (non RPM package)]
  2. Unpack it. For example to: /home/martin/mysql
  3. Create my.cnf file in your home directory. The file contents should be:

    [server]
    user=martin
    basedir=/home/martin/mysql
    datadir=/home/martin/sql_data
    socket=/home/martin/socket
    port=3666
    
  4. Go to the /home/martin/mysql directory and execute:

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

    Note that --defaults-file MUST be the first parameter, otherwise it won't work! It's a MySQL bug.

  5. Your MySQL server is ready. Start it with this command:

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

    Connecting to server:

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

    or

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

    Shutting down server:

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

    or

    mysqladmin --socket=/home/martin/socket -u root shutdown (using unix socket)
    
2
  • @gareth After step 5 when I try to connect to server it says mysql commandnot found. can you please tell me why is it like this. I followed the steps exactly.
    – vinay
    Jul 7, 2011 at 6:05
  • Hi @vinay - I edited this answer but am not the original author. @martin can you help?
    – Gareth
    Jul 7, 2011 at 13:19
0

You can build it and run it from your home directory if you have a compiler available, but in order to install software on linux, you will require root access.

1
  • But I actually have installed plenty of other software already (javac, R) on CentOS without having root access?!
    – user50105
    Nov 10, 2010 at 6:21
0

Martin's answer worked for me. To address the comments (I can't comment due to permissions here):

To connect to the server, you either need to add the /home/martin/mysql/bin directory (/home/martin/mysql/bin in the example) to your path, or use the full path name to run it:

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

The other missing piece was setting the root password. After doing the bin/mysqld_safe step (see step 5 in Martin's response), MySql told me how to set the root password. You need to do that step, but adding the --socket=/home/martin/socket option to the command line.

You must log in to answer this question.