根據需求現在需要測試mysql主從配置,但是由於本地主機資源有限,現在需要在一臺centos主機上面搭建兩到三個Mysql實例,以方便測試mysql主從。
實驗分三大步驟:
1,在Centos上面安裝MySQL server
2,利用MySQL的mysqld_multi配置多個實例
3,搭建MySQL主從
開始實驗:
2,利用MySQL的mysqld_multi配置多個實例
首先確保上一步安裝的mysql server正常運行
[root@TEST ~]# mysqladmin ping mysqld is alive [root@TEST ~]# /etc/init.d/mysqld status MySQL running (21075)[ OK ]
在同一臺主機上面運行多個mysql instance的時候需要用到mysql的一個特殊功能mysqld_multi,
在linux shell下輸入 mysqld_multi --example 就可以得到配置多個實例的一些例子
[root@localhost ~]# mysqld_multi --example ### there are many commons [mysqld_multi] mysqld = /usr/bin/mysqld_safe mysqladmin = /usr/bin/mysqladmin user = multi_admin password = my_password [mysqld2] socket = /tmp/mysql.sock2 port = 3307 pid-file = /var/lib/mysql2/hostname.pid2 datadir = /var/lib/mysql2 language = /usr/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 = /var/lib/mysql3/hostname.pid3 datadir = /var/lib/mysql3 language = /usr/share/mysql/swedish user = unix_user2 [mysqld4] socket = /tmp/mysql.sock4 port = 3309 pid-file = /var/lib/mysql4/hostname.pid4 datadir = /var/lib/mysql4 language = /usr/share/mysql/estonia user = unix_user3 [mysqld6] socket = /tmp/mysql.sock6 port = 3311 pid-file = /var/lib/mysql6/hostname.pid6 datadir = /var/lib/mysql6 language = /usr/share/mysql/japanese user = unix_user4
此試驗中需要再額外創建兩個instance,所以根據上面的例子,把所需的配置信息添加到mysql的主配置文件/etc/my.cnf 後面,例如:
[mysqld_multi] mysqld = /usr/bin/mysqld_safe mysqladmin = /usr/bin/mysqladmin user = root password = root1203 [mysqld2] socket = /tmp/mysql.sock2 port = 3307 pid-file = /var/run/mysqld/mysqld.pid2 log-slow-queries = /var/log/mysql2/slow-query-log ## mysql slow log #relay-log = /var/spool/mysqld2/mysqld-relay-bin ## relay for replication datadir = /var/lib/mysql2 ## mysql data file folder user = mysql [mysqld3] socket = /tmp/mysql.sock3 port = 3308 pid-file = /var/run/mysqld/mysqld.pid3 log-slow-queries = /var/log/mysql3/slow-query-log #relay-log = /var/spool/mysqld3/mysqld-relay-bin datadir = /var/lib/mysql3 user = mysql
接下來根據配置文件的信息創建對應的目錄並設置對應的權限
## make mysql data file folder mkdir -p /var/lib/mysql2 mkdir -p /var/lib/mysql3 ## make log folder mkdir -p /var/log/mysql2 mkdir -p /var/log/mysql3 mkdir -p /var/spool/mysql2 mkdir -p /var/spool/mysql3
修改mysql的數據目錄確保只有mysql用戶纔有訪問權限
chown mysql:root /var/lib/mysql2 chown mysql:root /var/lib/mysql2
利用 mysql_install_db 安裝初始化庫
mysql_install_db --user=mysql --datadir=/var/lib/mysql2 mysql_install_db --user=mysql --datadir=/var/lib/mysql3
最關鍵的時刻到了,啓動安裝的instance
[root@localhost ~]# mysqld_multi --help |grep Usage Usage: mysqld_multi [OPTIONS] {start|stop|report} [GNR,GNR,GNR...] [root@localhost ~]# mysqld_multi start 2 [root@localhost ~]# mysqld_multi start 3
嘗試登陸:
[root@localhost ~]# mysql -S /tmp/mysql.sock2 -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.1.71 Source distribution Copyright (c) 2000, 2013, 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> exit Bye [root@localhost ~]# mysql -S /tmp/mysql.sock3 -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 5.1.71-log Source distribution Copyright (c) 2000, 2013, 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>
到此在同一臺主機上面創建多個mysql instance的算是完成了。
但是最後需要說明的是,第一次當我嘗試stop 這些個instance的時候,使用 ”mysqld_multi stop 2" 卻不起作用,網上查了下說是需要grant一個 shutdown的權限即可,
mysql> show grants for root@'localhost'; +---------------------------------------------------------------------------------------------------------------+ | Grants for root@localhost | +---------------------------------------------------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '08a9554c6a9d5b2a' WITH GRANT OPTION | +---------------------------------------------------------------------------------------------------------------+ 1 row in set (0.02 sec) mysql> grant SHUTDOWN on *.* to 'root'@'localhost' ; Query OK, 0 rows affected (0.00 sec) mysql> show grants for root@'localhost'; +---------------------------------------------------------------------------------------------------------------+ | Grants for root@localhost | +---------------------------------------------------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '08a9554c6a9d5b2a' WITH GRANT OPTION | +---------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> mysql> exit Bye [root@localhost ~]# mysqld_multi stop 3 [root@localhost ~]# mysqld_multi stop 2 [root@localhost ~]# [root@localhost ~]# mysql -uroot -p -S /tmp/mysql.sock2 Enter password: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock2' (2) [root@localhost ~]#
OK,第二步測試通過