首页 > 代码库 > mysql_multi启动数据库

mysql_multi启动数据库

1.初始化数据库

在$mysql_base目录下,新增加存放data的文件夹,用mysql_install_db命令执行初始化

[root@ora11g scripts]# ./mysql_install_db --help | lessUsage: ./mysql_install_db [OPTIONS]  --basedir=path       The path to the MySQL installation directory.  --builddir=path      If using --srcdir with out-of-directory builds, you                       will need to set this to the location of the build                       directory where built files reside.  --cross-bootstrap    For internal use.  Used when building the MySQL system                       tables on a different host than the target.  --datadir=path       The path to the MySQL data directory.  --defaults-extra-file=name                       Read this file after the global files are read.  --defaults-file=name Only read default options from the given file name.  --force              Causes mysql_install_db to run even if DNS does not                       work.  In that case, grant table entries that normally                       use hostnames will use IP addresses.  --help               Display this help and exit.                       --ldata=http://www.mamicode.com/path         The path to the MySQL data directory. Same as --datadir.  --no-defaults        Dont read default options from any option file.  --rpm                For internal use.  This option is used by RPM files                       during the MySQL installation process.  --skip-name-resolve  Use IP addresses rather than hostnames when creating                       grant table entries.  This option can be useful if                       your DNS does not work.  --srcdir=path        The path to the MySQL source directory.  This option                       uses the compiled binaries and support files within the                       source tree, useful for if you dont want to install                       MySQL yet and just want to create the system tables.  --user=user_name     The login username to use for running mysqld.  Files                       and directories created by mysqld will be owned by this                       user.  You must be root to use this option.  By default                       mysqld runs using your current login name and files and                       directories that it creates will be owned by you.All other options are passed to the mysqld program
[root@ora11g scripts]# ./mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data2 --user=mysql Installing MySQL system tables...OKFilling help tables...OKTo start mysqld at boot time you have to copysupport-files/mysql.server to the right place for your systemPLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !To do so, start the server, then issue the following commands:/usr/local/mysql/bin/mysqladmin -u root password new-password/usr/local/mysql/bin/mysqladmin -u root -h ora11g password new-passwordAlternatively you can run:/usr/local/mysql/bin/mysql_secure_installationwhich will also give you the option of removing the testdatabases and anonymous user created by default.  This isstrongly recommended for production servers.See the manual for more instructions.You can start the MySQL daemon with:cd /usr/local/mysql ; /usr/local/mysql/bin/mysqld_safe &You can test the MySQL daemon with mysql-test-run.plcd /usr/local/mysql/mysql-test ; perl mysql-test-run.plPlease report any problems at http://bugs.mysql.com/[root@ora11g scripts]# 

 同样,再初始化一个data3

 

修改my.cnf的配置,添加上multi的相关属性,如果不是很清楚需要添加什么的话,可以参考mult给的例子

[root@ora11g ~]# mysqld_multi --example[mysqld_multi]mysqld     = /usr/local/mysql/bin/mysqld_safemysqladmin = /usr/local/mysql/bin/mysqladminuser       = multi_adminpassword   = my_password[mysqld2]socket     = /tmp/mysql.sock2port       = 3307pid-file   = /usr/local/mysql/mysqldata2/hostname.pid2datadir    = /usr/local/mysql/mysqldata2language   = /usr/local/mysql/share/mysql/englishuser       = unix_user1[mysqld3]mysqld     = /path/to/mysqld_safeledir      = /path/to/mysqld-binary/mysqladmin = /path/to/mysqladminsocket     = /tmp/mysql.sock3port       = 3308pid-file   = /usr/local/mysql/mysqldata3/hostname.pid3datadir    = /usr/local/mysql/mysqldata3language   = /usr/local/mysql/share/mysql/swedishuser       = unix_user2[mysqld4]socket     = /tmp/mysql.sock4port       = 3309pid-file   = /usr/local/mysql/mysqldata4/hostname.pid4datadir    = /usr/local/mysql/mysqldata4language   = /usr/local/mysql/share/mysql/estoniauser       = unix_user3 [mysqld6]socket     = /tmp/mysql.sock6port       = 3311pid-file   = /usr/local/mysql/mysqldata6/hostname.pid6datadir    = /usr/local/mysql/mysqldata6language   = /usr/local/mysql/share/mysql/japaneseuser       = unix_user4[root@ora11g ~]# 

我的相关配置如下:

[mysqld_multi]mysqld     = /usr/local/mysql/bin/mysqld_safemysqladmin = /usr/local/mysql/bin/mysqladmin user       = testpassword   = test# The MySQL server[mysqld3306]port            = 3306socket          = /tmp/mysql3306.sockpid-file        = /tmp/mysql3306.pidskip-external-lockingkey_buffer_size = 16Kmax_allowed_packet = 1Mtable_open_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 128Kbasedir = /usr/local/mysqldatadir = /usr/local/mysql/dataserver-id       = 1[mysqld3307]port            = 3307socket          = /tmp/mysql3307.sockpid-file        = /tmp/mysql3307.pidskip-external-lockingkey_buffer_size = 16Kmax_allowed_packet = 1Mtable_open_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 128Kbasedir = /usr/local/mysqldatadir = /usr/local/mysql/data2server-id       = 1[mysqld3308]port            = 3308socket          = /tmp/mysql3308.sockpid-file        = /tmp/mysql3308.pidskip-external-lockingkey_buffer_size = 16Kmax_allowed_packet = 1Mtable_open_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 128Kbasedir = /usr/local/mysqldatadir = /usr/local/mysql/data3server-id       = 1

主要需要注意的几个参数是:[mysqld_multi],port,socket,pid-file和datadir。

配置好之后,就可以启动了。

[root@ora11g bin]# ./mysqld_multi --defaults-file=../my.cnf start 3306 [root@ora11g bin]# ps -ef | grep mysq;root     10384     1  1 13:21 pts/2    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --port=3306 --socket=/tmp/mysql3306.sock --pid-file=/tmp/mysql3306.pid --skip-external-locking --key_buffer_size=16K --max_allowed_packet=1M --table_open_cache=4 --sort_buffer_size=64K --read_buffer_size=256K --read_rnd_buffer_size=256K --net_buffer_length=2K --thread_stack=128K --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --server-id=1mysql    10665 10384  4 13:21 pts/2    00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --skip-external-locking --key-buffer-size=16K --max-allowed-packet=1M --table-open-cache=4 --sort-buffer-size=64K --read-buffer-size=256K --read-rnd-buffer-size=256K --net-buffer-length=2K --thread-stack=128K --server-id=1 --log-error=/usr/local/mysql/data/ora11g.err --pid-file=/tmp/mysql3306.pid --socket=/tmp/mysql3306.sock --port=3306root     10684  7661  0 13:21 pts/2    00:00:00 grep mysq[root@ora11g bin]# ps -ef | grep mysqlroot     10384     1  0 13:21 pts/2    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --port=3306 --socket=/tmp/mysql3306.sock --pid-file=/tmp/mysql3306.pid --skip-external-locking --key_buffer_size=16K --max_allowed_packet=1M --table_open_cache=4 --sort_buffer_size=64K --read_buffer_size=256K --read_rnd_buffer_size=256K --net_buffer_length=2K --thread_stack=128K --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --server-id=1mysql    10665 10384  2 13:21 pts/2    00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --skip-external-locking --key-buffer-size=16K --max-allowed-packet=1M --table-open-cache=4 --sort-buffer-size=64K --read-buffer-size=256K --read-rnd-buffer-size=256K --net-buffer-length=2K --thread-stack=128K --server-id=1 --log-error=/usr/local/mysql/data/ora11g.err --pid-file=/tmp/mysql3306.pid --socket=/tmp/mysql3306.sock --port=3306root     10686  7661  0 13:21 pts/2    00:00:00 grep mysql[root@ora11g bin]# ./mysqld_multi --defaults-file=../my.cnf start 3307[root@ora11g bin]# ./mysqld_multi --defaults-file=../my.cnf start 3308[root@ora11g bin]# ps -ef | grep mysqlroot     10384     1  0 13:21 pts/2    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --port=3306 --socket=/tmp/mysql3306.sock --pid-file=/tmp/mysql3306.pid --skip-external-locking --key_buffer_size=16K --max_allowed_packet=1M --table_open_cache=4 --sort_buffer_size=64K --read_buffer_size=256K --read_rnd_buffer_size=256K --net_buffer_length=2K --thread_stack=128K --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --server-id=1mysql    10665 10384  0 13:21 pts/2    00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --skip-external-locking --key-buffer-size=16K --max-allowed-packet=1M --table-open-cache=4 --sort-buffer-size=64K --read-buffer-size=256K --read-rnd-buffer-size=256K --net-buffer-length=2K --thread-stack=128K --server-id=1 --log-error=/usr/local/mysql/data/ora11g.err --pid-file=/tmp/mysql3306.pid --socket=/tmp/mysql3306.sock --port=3306root     10695     1  1 13:21 pts/2    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --port=3307 --socket=/tmp/mysql3307.sock --pid-file=/tmp/mysql3307.pid --skip-external-locking --key_buffer_size=16K --max_allowed_packet=1M --table_open_cache=4 --sort_buffer_size=64K --read_buffer_size=256K --read_rnd_buffer_size=256K --net_buffer_length=2K --thread_stack=128K --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data2 --server-id=1mysql    10978 10695  7 13:21 pts/2    00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data2 --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --skip-external-locking --key-buffer-size=16K --max-allowed-packet=1M --table-open-cache=4 --sort-buffer-size=64K --read-buffer-size=256K --read-rnd-buffer-size=256K --net-buffer-length=2K --thread-stack=128K --server-id=1 --log-error=/usr/local/mysql/data2/ora11g.err --pid-file=/tmp/mysql3307.pid --socket=/tmp/mysql3307.sock --port=3307root     11003     1  1 13:21 pts/2    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --port=3308 --socket=/tmp/mysql3308.sock --pid-file=/tmp/mysql3308.pid --skip-external-locking --key_buffer_size=16K --max_allowed_packet=1M --table_open_cache=4 --sort_buffer_size=64K --read_buffer_size=256K --read_rnd_buffer_size=256K --net_buffer_length=2K --thread_stack=128K --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data3 --server-id=1mysql    11286 11003 15 13:21 pts/2    00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data3 --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --skip-external-locking --key-buffer-size=16K --max-allowed-packet=1M --table-open-cache=4 --sort-buffer-size=64K --read-buffer-size=256K --read-rnd-buffer-size=256K --net-buffer-length=2K --thread-stack=128K --server-id=1 --log-error=/usr/local/mysql/data3/ora11g.err --pid-file=/tmp/mysql3308.pid --socket=/tmp/mysql3308.sock --port=3308root     11305  7661  0 13:21 pts/2    00:00:00 grep mysql[root@ora11g bin]# 

中间有一个小插曲,因为我在安装mysql的时候,cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc\ ,当时制定的DMYSQL_DATADIR为mysqldata,所以在启动的时候,会报错:

[root@ora11g share]# more mysqld_multi.log mysqld_multi log file version 2.16; run: Fri Mar 28 12:58:30 2014Starting MySQL servers140328 12:58:30 [Warning] Cant create test file /usr/local/mysql/mysqldata/ora11g.lower-test140328 12:58:30 [Warning] Cant create test file /usr/local/mysql/mysqldata/ora11g.lower-test/usr/local/mysql/bin/mysqld: Cant change dir to /usr/local/mysql/mysqldata/ (Errcode: 2)140328 12:58:30 [ERROR] Aborting140328 12:58:30 [Note] /usr/local/mysql/bin/mysqld: Shutdown completemysqld_multi log file version 2.16; run: Fri Mar 28 12:59:07 2014Starting MySQL servers140328 12:59:07 [Warning] Cant create test file /usr/local/mysql/mysqldata/ora11g.lower-test140328 12:59:07 [Warning] Cant create test file /usr/local/mysql/mysqldata/ora11g.lower-test/usr/local/mysql/bin/mysqld: Cant change dir to /usr/local/mysql/mysqldata/ (Errcode: 2)140328 12:59:07 [ERROR] Aborting

只需要把mysql_safe里面相应的data的目录从mysqldata改为data就可以正常启动了。

# Next try where the source installs put itelif test -d $MY_BASEDIR_VERSION/var/mysqlthen  DATADIR=$MY_BASEDIR_VERSION/var# Or just give up and use our compiled-in defaultelse  DATADIR=/usr/local/mysql/datafi

 

再进数据库查看:

[root@ora11g bin]# cd /tmp[root@ora11g tmp]# lskeyring-HcV70B  mysql3306.pid   mysql3307.pid   mysql3308.pid   scim-panel-socket:0-root  vmware-rootmapping-root    mysql3306.sock  mysql3307.sock  mysql3308.sock  ssh-WENobU7545[root@ora11g tmp]# lltotal 24drwx------ 2 root  root  4096 Sep 26  2013 keyring-HcV70Bsrwxr-xr-x 1 root  root     0 Sep 26  2013 mapping-root-rw-rw---- 1 mysql mysql    6 Mar 28 13:21 mysql3306.pidsrwxrwxrwx 1 mysql mysql    0 Mar 28 13:21 mysql3306.sock-rw-rw---- 1 mysql mysql    6 Mar 28 13:21 mysql3307.pidsrwxrwxrwx 1 mysql mysql    0 Mar 28 13:21 mysql3307.sock-rw-rw---- 1 mysql mysql    6 Mar 28 13:21 mysql3308.pidsrwxrwxrwx 1 mysql mysql    0 Mar 28 13:21 mysql3308.socksrw------- 1 root  root     0 Nov 15  2012 scim-panel-socket:0-rootdrwx------ 2 root  root  4096 Mar 28 09:57 ssh-WENobU7545drwx------ 2 root  root  4096 Mar 27 17:03 vmware-root[root@ora11g tmp]# mysql -S mysql3306.sock Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 1Server version: 5.5.37 Source distributionCopyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type help; or \h for help. Type \c to clear the current input statement.mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || mysql              || performance_schema || test               |+--------------------+4 rows in set (0.00 sec)mysql> exitBye[root@ora11g tmp]# mysql -S mysql3308.sock  Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 1Server version: 5.5.37 Source distributionCopyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type help; or \h for help. Type \c to clear the current input statement.mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || mysql              || performance_schema || test               |+--------------------+4 rows in set (0.00 sec)mysql> exitBye[root@ora11g tmp]# 

 

 当想使用stop来关闭的时候:

[root@ora11g mysql]# mysqld_multi --defaults-file=my.cnf stop 3306

发现log里面报错:

mysqld_multi log file version 2.16; run: Fri Mar 28 13:42:17 2014

Stopping MySQL servers

/usr/local/mysql/bin/mysqladmin: connect to server at ‘localhost‘ failed
error: ‘Access denied for user ‘test‘@‘localhost‘ (using password: YES)‘

原来是相应的数据库里面还没有这个用户以及相应的权限。

去数据库中创建用户并授权:

[root@ora11g tmp]# ls -lrttotal 24srw------- 1 root  root     0 Nov 15  2012 scim-panel-socket:0-rootdrwx------ 2 root  root  4096 Sep 26  2013 keyring-HcV70Bsrwxr-xr-x 1 root  root     0 Sep 26  2013 mapping-rootdrwx------ 2 root  root  4096 Mar 27 17:03 vmware-rootdrwx------ 2 root  root  4096 Mar 28 09:57 ssh-WENobU7545srwxrwxrwx 1 mysql mysql    0 Mar 28 13:21 mysql3306.sock-rw-rw---- 1 mysql mysql    6 Mar 28 13:21 mysql3306.pidsrwxrwxrwx 1 mysql mysql    0 Mar 28 13:21 mysql3307.sock-rw-rw---- 1 mysql mysql    6 Mar 28 13:21 mysql3307.pidsrwxrwxrwx 1 mysql mysql    0 Mar 28 13:21 mysql3308.sock-rw-rw---- 1 mysql mysql    6 Mar 28 13:21 mysql3308.pid[root@ora11g tmp]# mysql -S mysql3306.sockWelcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 3Server version: 5.5.37 Source distributionCopyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type help; or \h for help. Type \c to clear the current input statement.mysql> grant shutdown on *.* to test@localhost identified by ‘test‘ with grant option;Query OK, 0 rows affected (0.00 sec)mysql> show grants for test@localhost;+---------------------------------------------------------------+| Grants for test@localhost                                     |+---------------------------------------------------------------+| GRANT SHUTDOWN ON *.* TO test@localhost WITH GRANT OPTION |+---------------------------------------------------------------+1 row in set (0.01 sec)mysql> 

创建完毕后,再去停数据库:

[root@ora11g mysql]# mysqld_multi --defaults-file=my.cnf stop 3306-3308
[root@ora11g mysql]# ps -ef | grep 3306
root 11551 7661 0 13:49 pts/2 00:00:00 mysql -S mysql3306.sock
root 11583 7547 0 13:51 pts/1 00:00:00 grep 3306

可以在日志中发现已经能正常的进行关闭了。
Stopping MySQL servers

140328 13:50:53 mysqld_safe mysqld from pid file /tmp/mysql3306.pid ended

 相应的,在tmp目录下面的socket文件也会相应的删除了。


140328 13:50:55 mysqld_safe mysqld from pid file /tmp/mysql3307.pid ended
mysqld_multi log file version 2.16; run: Fri Mar 28 13:50:56 2014

Stopping MySQL servers

140328 13:50:57 mysqld_safe mysqld from pid file /tmp/mysql3308.pid ended