前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysqld_multi 的使用方法

mysqld_multi 的使用方法

作者头像
保持热爱奔赴山海
发布2019-09-17 14:02:10
9400
发布2019-09-17 14:02:10
举报
文章被收录于专栏:数据库相关

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;

直接贴操作笔记:

代码语言:javascript
复制
mkdir /data/mysql
cd /data/mysql
mkdir 3306/{data,tmp} -pv
mkdir 3307/{data,tmp} -pv

/etc/my.cnf 配置文件:

代码语言:javascript
复制
[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实例需要的配置文件(或者不要模板文件直接初始化也行,但是不建议这么做),然后初始化:

代码语言:javascript
复制
/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个实例

代码语言:javascript
复制
mysqld_multi report
mysqld_multi start 3307
mysqld_multi start 3306

# 创建mysql关闭用的账号:

代码语言:javascript
复制
mysql -uroot -S  /tmp/mysql.sock3307
CREATE USER 'multi_admin'@'localhost' IDENTIFIED BY '123456';
GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost';
代码语言:javascript
复制
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个的输出结果)

代码语言:javascript
复制
# 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实例已经关闭了。

同样的方法,我们还可以启停其他的实例。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/06/19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档