mysqld_multi 的使用方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysqld_multi 的使用方法相关的知识,希望对你有一定的参考价值。
mysqld_multi 的使用方法:
官方文档:https://dev.mysql.com/doc/refman/5.7/en/mysqld-multi.html 【文档有些问题,按照它的这个配置,mysqld_multi无法关闭实例】
mysqld_multi无法关闭实例的解决方法:
https://bugs.mysql.com/bug.php?id=77227
I have the same problem. After adding some traces in mysqld_multi, I have found the problem : since 5.6.25, my_print_defaults no longer returns password in readable form (we have to use the "--show" option to obtain it). mysqld_multi call my_print_default to obtain the user and password to use with mysqladmin.
Also, to be able to stop instances with mysqld_multi, I have made a modification in the "defaults_for_group" function of mysqld_multi. I have changed the following line :
my $com= join ' ', 'my_print_defaults', @defaults_options, $group;
with :
my $com= join ' ', 'my_print_defaults -s', @defaults_options, $group;
直接贴操作笔记:
mkdir /data/mysql cd /data/mysql mkdir 3306/{data,tmp} -pv mkdir 3307/{data,tmp} -pv
/etc/my.cnf 配置文件:
[client] port = 3306 socket = /tmp/mysql.sock user = root [mysql] no-auto-rehash #safe-updates prompt="[\d] > " [mysqld_multi] mysqld = /usr/local/mysql/bin/mysqld_safe mysqladmin = /usr/local/mysql/bin/mysqladmin log = /var/log/mysqld_multi.log user = multi_admin password = 123456 [mysqld] character-set-server = utf8 default_storage_engine = InnoDB transaction_isolation = READ-COMMITTED skip_name_resolve = ON skip_external_locking max_connections = 1500 sort_buffer_size = 512K read_buffer_size = 512K read_rnd_buffer_size = 512K join_buffer_size = 256K thread_stack = 256K binlog_cache_size = 2M connect_timeout = 20 wait_timeout = 14400 interactive_timeout = 14400 net_write_timeout = 180 lock_wait_timeout = 120 thread_cache_size = 64 open_files_limit = 65535 innodb_open_files = 4000 skip-innodb_adaptive_hash_index query_cache_type = OFF query_cache_size = 0 expire_logs_days = 5 sync_binlog = 1 innodb_support_xa = 1 relay-log-purge=1 relay_log_info_repository = TABLE relay_log_recovery = ON master_info_repository = TABLE slave_net_timeout = 30 skip-slave-start = ON log_slave_updates = ON innodb_use_native_aio = ON innodb_file_per_table = ON innodb_flush_log_at_trx_commit = 1 innodb_flush_method=O_DIRECT innodb_max_dirty_pages_pct = 50 innodb_lock_wait_timeout = 50 innodb_stats_persistent = ON innodb_stats_persistent_sample_pages = 64 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [mysqld3306] socket = /tmp/mysql.sock3306 port = 3306 pid-file = /data/mysql/3306/data/mysql.pid3306 datadir = /data/mysql/3306/data tmpdir = /data/mysql/3306/tmp/ user = root server-id = 111 log-bin = mysql-bin binlog_format = ROW max_binlog_size = 256M log_bin_trust_function_creators = ON [mysqld3307] socket = /tmp/mysql.sock3307 port = 3307 pid-file = /data/mysql/3307/data/mysql.pid3307 datadir = /data/mysql/3307/data tmpdir = /data/mysql/3307/tmp/ user = root server-id = 222 log-bin = mysql-bin binlog_format = ROW max_binlog_size = 256M log_bin_trust_function_creators = ON
初始化实例的时候,我们先造2个模板文件/data/3307.cnf /data/3306.cnf 写上3307和3306实例需要的配置文件(或者不要模板文件直接初始化也行,但是不建议这么做),然后初始化:
/usr/local/mysql/scripts/mysql_install_db --defaults-file=/data/3307.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/3307/data /usr/local/mysql/scripts/mysql_install_db --defaults-file=/data/3306.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/3306/data
启动2个实例
mysqld_multi report mysqld_multi start 3307 mysqld_multi start 3306
# 创建mysql关闭用的账号:
mysql -uroot -S /tmp/mysql.sock3307 CREATE USER 'multi_admin'@'localhost' IDENTIFIED BY '123456'; GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost';
mysql -uroot -S /tmp/mysql.sock3306 CREATE USER 'multi_admin'@'localhost' IDENTIFIED BY '123456'; GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost';
操作至此,我们mysqld_multi能启动mysql实例了,但是却无法关闭实例。原因如下:
# 输出明细(注意对比下面2个的输出结果)
# my_print_defaults mysqld_multi mysql3307 --mysqld=/usr/local/mysql/bin/mysqld_safe --mysqladmin=/usr/local/mysql/bin/mysqladmin --log=/var/log/mysql/mysqld_multi.log --user=multi_admin --password=***** # my_print_defaults mysqld_multi mysql3307 -s --mysqld=/usr/local/mysql/bin/mysqld_safe --mysqladmin=/usr/local/mysql/bin/mysqladmin --log=/var/log/mysql/mysqld_multi.log --user=multi_admin --password=123456 ---- 可看到这里密码能显示出来了
vim /usr/local/mysql/bin/mysqld_multi +216 , 在my_print_defaults 后面加一个 -s 然后保存退出。
my $com= join ' ', 'my_print_defaults -s', @defaults_options, $group;
然后, 执行下:
mysqld_multi stop 3307
mysqld_multi report
可以看到3307实例已经关闭了。
同样的方法,我们还可以启停其他的实例。
以上是关于mysqld_multi 的使用方法的主要内容,如果未能解决你的问题,请参考以下文章
修改ibdata1大小的验证以及如何使用mysqld_multi管理多实例