[mysqld_multi]
是否須要配置html
my.cnf
上直接配置[mysqld1]
、[mysqld2]
、[mysqld3]
實例標籤,而不配置[mysqld_multi]
,使用mysqld_multi start 1
也是能夠啓動
數據庫實例的,可是沒有mysqld_safe
的守護進程。因此該標籤須要配置
python
若是在[client]
和[mysqld_multi]
標籤中同時存在user
和password
, 則在關閉數據庫實例中會使用[mysqld_multi]
中的user
去關閉。mysql
(存在精確匹配的標籤,則優先使用精確匹配標籤下的配置項
)linux
multi_admin用戶
的做用
經過官方文檔中咱們看到,'multi_admin'@'localhost'
這個用戶主要的做用是用來關閉
數據庫實例,由於文檔中只受權了SHUTDOWN
權限。因此在[mysqld_multi]
標籤下,咱們須要配置user
和password
來進行關閉數據庫實例。可是實際上有bug,還不如用(mysqld_multi --user=root --password=iforgot stop 1
)受權有足夠權限,這個權限還在摸索中,哪位有驗證提供一下,謝謝!c++
mysqld1
-- MySQL 5.7.18mysqld2
-- MySQL 5.7.18mysqld3
-- MySQL 5.6.36mysqld1
(MySQL 5.7.18)mysqld2
(MySQL 5.7.18)mysqld3
(MySQL 5.6.36)這三個參數必須定製且必須不一樣 (port / datadir / socket)sql
server-id
和多數據庫實例沒有關係,和數據庫複製有關係。注意MySQL5.6.36的plugin_dir
的路徑數據庫
配置說明:bash
匹配度高
的標籤中的配置項的值
,會覆蓋
掉匹配度低
的標籤中的配置項的值
[mysqldN
]中的配置項會和[mysqld]中的配置項進行合併,而且[mysqldN
]中已有的配置項的值,會覆蓋掉[mysqld]中的配置項的值,如datadir
, port
等服務器
#========================================================== # 多實例配置文件 #========================================================== [client] # 這個標籤若是配置了用戶和密碼, # 而且[mysqld_multi]下沒有配置用戶名密碼, # 則mysqld_multi stop時, 會使用這個密碼 # 若是沒有精確的匹配,則匹配[client]標籤 user = root password = iforgot [mysqld_multi] mysqld =/usr/local/mysql/bin/mysqld_safe mysqladmin =/usr/local/mysql/bin/mysqladmin log = /usr/local/mysql/mysqld_multi.log user = multi_admin pass = 123456 # 官方文檔中寫的password,可是存在bug,須要改爲pass(v5.7.18) # 寫成password,start時正常,stop時,報以下錯誤 # Access denied for user 'multi_admin'@'localhost' (using password: YES) ############################################################### ################################################################ [mysqld1] # mysqld後面的數字爲GNR, 是該實例的標識(mysqld_multi start 1) server-id = 33016 mysqld = mysqld mysqladmin = mysqladmin group_concat_max_len = 102400 user = mysql port = 33016 socket = /r2/mysqldata/mysql_33016/mysql.sock basedir = /usr/local/mysql datadir = /r2/mysqldata/mysql_33016/data pid_file = /r2/mysqldata/mysql_33016/data/mysql.pid log_error = /r2/mysqldata/mysql_33016/logs/mysql_error.log log_bin = /r2/mysqldata/mysql_33016/logs/binlog slow_query_log_file = /r2/mysqldata/mysql_33016/logs/slow.log log_timestamps = system ################################################################ ################################################################ [mysqld2] server-id = 33026 mysqld = mysqld mysqladmin = mysqladmin user = mysql port = 33026 socket = /r2/mysqldata/mysql_33026/mysql.sock basedir = /usr/local/mysql datadir = /r2/mysqldata/mysql_33026/data/ pid_file = /r2/mysqldata/mysql_33026/data/mysql.pid log_error = /r2/mysqldata/mysql_33026/logs/mysql_error.log log_bin = /r2/mysqldata/mysql_33026/logs/binlog slow_query_log_file = /r2/mysqldata/mysql_33026/logs/slow.log log_timestamps = system ################################################################ ################################################################ [mysqld3] server-id = 33036 mysqld = /usr/local/mysql56/bin/mysqld mysqladmin = /usr/local/mysql56/bin/mysqladmin user = mysql port = 33036 socket = /r2/mysqldata/mysql_33036/mysql.sock basedir = /usr/local/mysql56 datadir = /r2/mysqldata/mysql_33036/data pid_file = /r2/mysqldata/mysql_33036/data/mysql.pid log_error = /r2/mysqldata/mysql_33036/logs/mysql_error.log log_bin = /r2/mysqldata/mysql_33036/logs/binlog slow_query_log_file = /r2/mysqldata/mysql_33036/logs/slowlogs/slow.log plugin_dir = /usr/local/mysql56/lib/plugin ################################################################ ################################################################ [mysqld] wait_timeout = 31536000 #interactive_timeout = 600 sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER" skip_name_resolve = 1 lower_case_table_names = 0 character-set-server = utf8 #auto_increment_increment = 1 #auto_increment_offset = 1 init_connect = 'set name utf8;' #log_timestamps = system tmpdir = /r2/mysqldata #plugin_dir = /usr/local/mysql/lib/plugin #========================================================== #bin setting #========================================================== binlog_format = MIXED log_bin_trust_function_creators = 1 binlog_cache_size = 64M max_binlog_cache_size = 1G max_binlog_size = 512M expire_logs_days = 7 #========================================================== # replication relay-log #========================================================== log-slave-updates = 1 slave-net-timeout = 60 sync-master-info = 1 sync-relay-log = 1 sync-relay-log-info = 1 #========================================================== #no need to sync database #========================================================== binlog-ignore-db = test binlog-ignore-db = information_schema binlog-ignore-db = mysql #========================================================== #performance setting #========================================================== open_files_limit = 1024000 max_connections = 1000 max_user_connections = 9990 max_connect_errors = 100000 table_open_cache = 1024 max_allowed_packet = 32M thread_cache_size = 64 max_heap_table_size = 16M query_cache_type = 0 ###global cache ### key_buffer_size = 16M query_cache_size = 0 ###session cache ### sort_buffer_size = 8M #排序緩衝 join_buffer_size = 4M #錶鏈接緩衝 read_buffer_size = 8M #順序讀緩衝 read_rnd_buffer_size = 8M #隨機讀緩衝 tmp_table_size = 32M #內存臨時表 binlog_cache_size = 4M #二進制日誌緩衝 thread_stack = 256KB #線程的堆棧的大小 #========================================================== #innodb setting #========================================================== default-storage-engine = InnoDB innodb_buffer_pool_size = 512M innodb_open_files = 1000 innodb_flush_log_at_trx_commit = 1 innodb_file_per_table = 1 innodb_flush_method = O_DIRECT innodb_log_file_size = 128M innodb_log_files_in_group = 2 innodb_data_file_path = ibdata1:128M:autoextend innodb_buffer_pool_instances = 8 innodb_lock_wait_timeout = 5 innodb_io_capacity = 1000 innodb_io_capacity_max = 20000 innodb_large_prefix = 0 innodb_thread_concurrency = 64 innodb_strict_mode = OFF innodb_sort_buffer_size = 4194304 innodb_file_format = Barracuda innodb_file_format_max = Barracuda #========================================================== #slow setting #========================================================== slow-query-log = on long_query_time = 1 [mysqld-5.7] innodb_buffer_pool_dump_pct = 40 innodb_page_cleaners = 4 innodb_undo_log_truncate = 1 innodb_max_undo_log_size = 1G # 該參數減少到1G innodb_purge_rseg_truncate_frequency = 128 binlog_gtid_simple_recovery = 1 log_timestamps = system transaction_write_set_extraction= MURMUR32 show_compatibility_56 = on
yum remove MariaDB-common MariaDB-compat MariaDB-server --rhel7刪除mariadb yum install gcc gcc-c++ bzip2 bzip2-devel bzip2-libs python-devel -y --安裝mysql環境包 tar zxvf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz -C /usr/local/ --解壓mysql到/usr/local目錄 tar zxvf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz -C /usr/local/ --同上 cd /usr/local/ ln -s mysql-5.7.18-linux-glibc2.5-x86_64/ mysql --建立軟鏈接 ln -s mysql-5.6.36-linux-glibc2.5-x86_64/ mysql56 --同上 groupadd mysql && useradd -r -g mysql -s /bin/false mysql --添加用戶 mkdir -p /r2/mysqldata/ --建立主目錄 chown -R mysql:mysql /usr/local/mysql --受權訪問mysql-5.7.18-linux-glibc2.5-x86_64 chown -R mysql:mysql /r2/mysqldata/ --同上 chmod 750 /r2/mysqldata/ --添加權限 chmod 750 /usr/local/mysql --同上 mv /tmp/multi_my.cnf /etc/my.cnf --multi_my.cnf配置文件上面已附上 --下面添加到環境變量 cat <<EOF >>/etc/profile export PATH=\$PATH:/usr/local/mysql/bin/ EOF source /etc/profile echo $PATH --開始建立並初始化mysqld1 (mysql5.7臨時密碼在日誌輸出上面有提示,下同) mkdir -p /r2/mysqldata/mysql_33016/{logs,data} chown -R mysql.mysql /r2/mysqldata/mysql_33016 chmod 755 /r2/mysqldata/mysql_33016/ cd /usr/local/mysql/bin/ ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/r2/mysqldata/mysql_33016/data/ --開始建立並初始化mysqld2 mkdir -p /r2/mysqldata/mysql_33026/{logs,data} chown -R mysql.mysql /r2/mysqldata/mysql_33026 cd /usr/local/mysql/bin/ ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/r2/mysqldata/mysql_33026/data/ --開始建立並初始化mysqld3 (mysql5.6初始化密碼是空) mkdir -p /r2/mysqldata/mysql_33036/{logs,data} chown -R mysql.mysql /r2/mysqldata/mysql_33036 cd /usr/local/mysql56/ ./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql56 --datadir=/r2/mysqldata/mysql_33036/data/ -- 安裝後,須要檢查mysql_error.log 確保沒有錯誤出現
--使用mysqld_multi啓動,mysqld_multi [OPTIONS] {start|reload|stop|report} [GNR,GNR,GNR...] [root@multi mysql56]# mysqld_multi start 1 [root@multi mysql56]# mysqld_multi start 2 [root@multi mysql56]# mysqld_multi start 3 [root@multi mysql56]# mysqld_multi report Reporting MySQL servers MySQL server from group: mysqld1 is running MySQL server from group: mysqld2 is running MySQL server from group: mysqld3 is running --查看三個mysql端口 [root@multi mysql56]# netstat -tunlp | grep mysql tcp6 0 0 :::33036 :::* LISTEN 35400/mysqld tcp6 0 0 :::33016 :::* LISTEN 37735/mysqld tcp6 0 0 :::33026 :::* LISTEN 37738/mysqld -- 使用sock進行登陸,並輸入臨時密碼後,修改密碼,以下: root@multi mysqldata]# mysql -uroot -p -S /r2/mysqldata/mysql_33016/mysql.sock Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 20 Server version: 5.7.18-log MySQL Community Server (GPL) Copyright (c) 2000, 2017, 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>alter user 'root'@'localhost' identified by 'iforgot' ; mysql>create user 'multi_admin'@'localhost' identified by '123456'; mysql>grant shutdown on *.* to 'multi_admin'@'localhost'; mysql>flush privileges; mysql>exit; --mysqld2 同上;mysqld3 因爲是mysql5.6.36版本直接使用mysql -S /r2/mysqldata/mysql_33036/mysql.sock登錄 [root@multi mysqldata]# mysql -S /r2/mysqldata/mysql_33036/mysql.sock mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 147 Server version: 5.6.36-log MySQL Community Server (GPL) Copyright (c) 2000, 2017, 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>set password=password('iforgot'); mysql>create user 'multi_admin'@'localhost' identified by '123456'; mysql>grant shutdown on *.* to 'multi_admin'@'localhost'; mysql>flush privileges; mysql>exit;
[root@multi mysql56]# ps -ef | grep mysqld mysql 35400 1 0 14:56 pts/1 00:00:10 /usr/local/mysql56/bin/mysqld --server-id=33036 --user=mysql --port=33036 --socket=/r2/mysqldata/mysql_33036/mysql.sock --basedir=/usr/local/mysql56 --datadir=/r2/mysqldata/mysql_33036/data --pid_file=/r2/mysqldata/mysql_33036/data/mysql.pid --log_error=/r2/mysqldata/mysql_33036/logs/mysql_error.log --log_bin=/r2/mysqldata/mysql_33036/logs/binlog --slow_query_log_file=/r2/mysqldata/mysql_33036/logs/slowlogs/slow.log --plugin_dir=/usr/local/mysql56/lib/plugin mysql 37735 1 0 16:33 pts/1 00:00:05 mysqld --server-id=33016 --group_concat_max_len=102400 --user=mysql --port=33016 --socket=/r2/mysqldata/mysql_33016/mysql.sock --basedir=/usr/local/mysql --datadir=/r2/mysqldata/mysql_33016/data --pid_file=/r2/mysqldata/mysql_33016/data/mysql.pid --log_error=/r2/mysqldata/mysql_33016/logs/mysql_error.log --log_bin=/r2/mysqldata/mysql_33016/logs/binlog --slow_query_log_file=/r2/mysqldata/mysql_33016/logs/slow.log --log_timestamps=system mysql 37738 1 0 16:33 pts/1 00:00:04 mysqld --server-id=33026 --user=mysql --port=33026 --socket=/r2/mysqldata/mysql_33026/mysql.sock --basedir=/usr/local/mysql --datadir=/r2/mysqldata/mysql_33026/data/ --pid_file=/r2/mysqldata/mysql_33026/data/mysql.pid --log_error=/r2/mysqldata/mysql_33026/logs/mysql_error.log --log_bin=/r2/mysqldata/mysql_33026/logs/binlog --slow_query_log_file=/r2/mysqldata/mysql_33026/logs/slow.log --log_timestamps=system -- 上面是mysqld_safe的進程
設置login-path
主要爲了可以簡化登陸,同時還可讓每一個數據庫的密碼都不一樣,避免使用[client]下的統一用戶名密碼session
[root@multi mysqldata]# mysql_config_editor set -G mysqld1 -u root -p -S /r2/mysqldata/mysql_33016/mysql.sock Enter password: [root@multi mysqldata]# mysql_config_editor set -G mysqld2 -u root -p -S /r2/mysqldata/mysql_33026/mysql.sock Enter password: [root@multi mysqldata]# mysql_config_editor set -G mysqld3 -u root -p -S /r2/mysqldata/mysql_33036/mysql.sock Enter password: [root@multi mysqldata]# -- 而後可使用mysql --login-path=mysql1 這種方式登陸