mysql_multi啟動數據庫


1.初始化數據庫

在$mysql_base目錄下,新增加存放data的文件夾,用mysql_install_db命令執行初始化

[root@ora11g scripts]# ./mysql_install_db --help | less
Usage: ./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=path         The path to the MySQL data directory. Same as --datadir.
  --no-defaults        Don't 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 don't 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...
OK
Filling help tables...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE 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-password'

Alternatively you can run:
/usr/local/mysql/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly 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.pl
cd /usr/local/mysql/mysql-test ; perl mysql-test-run.pl

Please 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_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user       = multi_admin
password   = my_password

[mysqld2]
socket     = /tmp/mysql.sock2
port       = 3307
pid-file   = /usr/local/mysql/mysqldata2/hostname.pid2
datadir    = /usr/local/mysql/mysqldata2
language   = /usr/local/mysql/share/mysql/english
user       = unix_user1

[mysqld3]
mysqld     = /path/to/mysqld_safe
ledir      = /path/to/mysqld-binary/
mysqladmin = /path/to/mysqladmin
socket     = /tmp/mysql.sock3
port       = 3308
pid-file   = /usr/local/mysql/mysqldata3/hostname.pid3
datadir    = /usr/local/mysql/mysqldata3
language   = /usr/local/mysql/share/mysql/swedish
user       = unix_user2

[mysqld4]
socket     = /tmp/mysql.sock4
port       = 3309
pid-file   = /usr/local/mysql/mysqldata4/hostname.pid4
datadir    = /usr/local/mysql/mysqldata4
language   = /usr/local/mysql/share/mysql/estonia
user       = unix_user3
 
[mysqld6]
socket     = /tmp/mysql.sock6
port       = 3311
pid-file   = /usr/local/mysql/mysqldata6/hostname.pid6
datadir    = /usr/local/mysql/mysqldata6
language   = /usr/local/mysql/share/mysql/japanese
user       = unix_user4
[root@ora11g ~]# 

我的相關配置如下:

[mysqld_multi]
mysqld     = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin 
user       = test
password   = test


# The MySQL server
[mysqld3306]
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       = 1

[mysqld3307]
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       = 1

[mysqld3308]
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       = 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=1
mysql    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=3306
root     10684  7661  0 13:21 pts/2    00:00:00 grep mysq
[root@ora11g bin]# ps -ef | grep mysql
root     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=1
mysql    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=3306
root     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 mysql
root     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=1
mysql    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=3306
root     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=1
mysql    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=3307
root     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=1
mysql    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=3308
root     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 2014

Starting MySQL servers

140328 12:58:30 [Warning] Can't create test file /usr/local/mysql/mysqldata/ora11g.lower-test
140328 12:58:30 [Warning] Can't create test file /usr/local/mysql/mysqldata/ora11g.lower-test
/usr/local/mysql/bin/mysqld: Can't change dir to '/usr/local/mysql/mysqldata/' (Errcode: 2)
140328 12:58:30 [ERROR] Aborting

140328 12:58:30 [Note] /usr/local/mysql/bin/mysqld: Shutdown complete

mysqld_multi log file version 2.16; run: Fri Mar 28 12:59:07 2014

Starting MySQL servers

140328 12:59:07 [Warning] Can't create test file /usr/local/mysql/mysqldata/ora11g.lower-test
140328 12:59:07 [Warning] Can't create test file /usr/local/mysql/mysqldata/ora11g.lower-test
/usr/local/mysql/bin/mysqld: Can't 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 it
elif test -d $MY_BASEDIR_VERSION/var/mysql
then
  DATADIR=$MY_BASEDIR_VERSION/var
# Or just give up and use our compiled-in default
else
  DATADIR=/usr/local/mysql/data
fi

 

再進數據庫查看:

[root@ora11g bin]# cd /tmp
[root@ora11g tmp]# ls
keyring-HcV70B  mysql3306.pid   mysql3307.pid   mysql3308.pid   scim-panel-socket:0-root  vmware-root
mapping-root    mysql3306.sock  mysql3307.sock  mysql3308.sock  ssh-WENobU7545
[root@ora11g tmp]# ll
total 24
drwx------ 2 root  root  4096 Sep 26  2013 keyring-HcV70B
srwxr-xr-x 1 root  root     0 Sep 26  2013 mapping-root
-rw-rw---- 1 mysql mysql    6 Mar 28 13:21 mysql3306.pid
srwxrwxrwx 1 mysql mysql    0 Mar 28 13:21 mysql3306.sock
-rw-rw---- 1 mysql mysql    6 Mar 28 13:21 mysql3307.pid
srwxrwxrwx 1 mysql mysql    0 Mar 28 13:21 mysql3307.sock
-rw-rw---- 1 mysql mysql    6 Mar 28 13:21 mysql3308.pid
srwxrwxrwx 1 mysql mysql    0 Mar 28 13:21 mysql3308.sock
srw------- 1 root  root     0 Nov 15  2012 scim-panel-socket:0-root
drwx------ 2 root  root  4096 Mar 28 09:57 ssh-WENobU7545
drwx------ 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 1
Server version: 5.5.37 Source distribution

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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> exit
Bye
[root@ora11g tmp]# mysql -S mysql3308.sock  
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.37 Source distribution

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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> exit
Bye
[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 -lrt
total 24
srw------- 1 root  root     0 Nov 15  2012 scim-panel-socket:0-root
drwx------ 2 root  root  4096 Sep 26  2013 keyring-HcV70B
srwxr-xr-x 1 root  root     0 Sep 26  2013 mapping-root
drwx------ 2 root  root  4096 Mar 27 17:03 vmware-root
drwx------ 2 root  root  4096 Mar 28 09:57 ssh-WENobU7545
srwxrwxrwx 1 mysql mysql    0 Mar 28 13:21 mysql3306.sock
-rw-rw---- 1 mysql mysql    6 Mar 28 13:21 mysql3306.pid
srwxrwxrwx 1 mysql mysql    0 Mar 28 13:21 mysql3307.sock
-rw-rw---- 1 mysql mysql    6 Mar 28 13:21 mysql3307.pid
srwxrwxrwx 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.sock
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.5.37 Source distribution

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM