[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 这种方式登陆