mysql和其他shell一样,可以自定义终端提示符,这个可能都知道.有3种方法实现
1. 设置系统变量
1 | export MYSQL_PS1='\u@\h@\p [\d]' |
2. 在my.cnf设置
1 | [client] |
3. 传prompt参数到mysql 命令行
1 | mysql -uroot -pxxxx -h127.0.0.1 --prompt='\u@\h@\p [\d]' |
这3种方法在一个机器只有一个mysql 实例的时候都可以适用
问题来了
当一个机器存在2个以上实例,而且有主从关系。我们需要标注我们当前登录的是主库还是从库
当这个需求出现后,如果使用设置系统变量的方法去实现是比较麻烦的.
需要写一些脚本判断当前的库是主库还是从库,然后设置prompt变量
如果用传统的设置在my.cnf的方法,他就是全局的.无法识别登录的是哪个实例
用prompt参数传入mysql命令行明显也不是很好的办法,每次登录要输入一大堆难输入的字符串,还要记住哪个实例是主库或者从库
到这里经过一些联想,发觉,既然mysql有一个机器运行多个实例的mysqld_multi管理工具
他的工作原理就是读取my.cnf里面的section的配置
然后去启动和关闭mysqld进程的,既然他能从用户输入的参数定位到my.cnf里面的section,mysql应该是实现了这个功能的.
经过一番google,确实发现一个不怎么常用的参数’–defaults-group-suffix=’就是实现去读取自定义的section的.
他的原理是这样的:
如果你指定 –defaults-group-suffix=_good
那么他会去my.cnf读取 [mysql_good] section
到这里,我们的实现方法就明朗了:
配置2个section,一个[mysql_master]和[mysql_slave] ,然后登录的时候传suffix参数就可以了
方案如下
在 my.cnf添加:1
2
3
4
5
6
7
8[mysql_master]
socket=/tmp/mysql_3306.sock
prompt='\u@\h:\p (\d)-[master] > '
[mysql_slave]
user=root
socket=/tmp/mysql_3307.sock
prompt='\u@\h:\p (\d)-[slave] > '
登录方式
1 | [root@localhost ~]# mysql -uroot -p --defaults-group-suffix='_slave' |
简化一下,做一个alias
1 | [root@localhost ~] vim ~/.bashrc |
参考连接:
https://dev.mysql.com/doc/refman/5.5/en/option-file-options.html
https://www.quora.com/Is-there-a-way-to-save-default-MySQL-connection-parameters-in-a-configuration-file