Simplify MySQL Connections with a Smarter Bash Function

Working with multiple MySQL environments is a common scenario for developers. Whether you're connecting to development, staging, or production databases, you often need different connection parameters for each environment. While MySQL's configuration files help manage these connections, switching between them can be cumbersome. Let me introduce a simple but powerful bash function that will streamline this process.

The Problem

If you work with MySQL regularly, you likely have multiple connection profiles defined in your ~/.my.cnf file using the [group] syntax. To use a specific configuration group, you need to use the --defaults-group-suffix option:

mysql --defaults-group-suffix=dev
mysql --defaults-group-suffix=prod

This works, but it's verbose and typo-prone.

The Solution: A Smarter Bash Function

Here's a bash function that makes working with MySQL much more convenient:

m() {
    if [ $# -eq 0 ]; then
        # If no arguments provided, run mysql directly
        mysql
    elif [[ "$1" == -* ]]; then
        # If first argument starts with -, pass all arguments directly to mysql
        mysql "$@"
    else
        # Otherwise, treat first argument as suffix
        local suffix=$1
        shift
        mysql --defaults-group-suffix=$suffix "$@"
    fi
}

How It Works

This function provides three different behaviors depending on how you call it:

  1. No arguments: Simply runs the MySQL client with default settings.

    m
    
  2. First argument starts with a dash: Passes all arguments directly to MySQL, just like you're using the mysql command.

    m -e "SHOW DATABASES"
    
  3. First argument doesn't start with a dash: Uses the first argument as the defaults-group-suffix and passes the remaining arguments to MySQL.

    m dev -e "SELECT * FROM users"
    

Practical Examples

Example 1: Connect to Different Environments

m dev    # Connect to development database
m prod   # Connect to production database
m stage  # Connect to staging database

Example 2: Run Commands Directly

m dev -e "SELECT COUNT(*) FROM orders"
m prod -N -e "SELECT id FROM customers LIMIT 5"  # -N removes column names

Example 3: Use MySQL Options Directly

m -N -e "SELECT VERSION()"  # Quick query without environment prefix
m -t -e "SHOW TABLES"  # Table format output

Setup Instructions

  1. Add the function to your .bashrc or .zshrc file.
  2. Set up your MySQL configuration groups in ~/.my.cnf:
[client]
# Default settings

[clientdev]
user=devuser
password=devpass
host=dev-db.example.com

[clientprod]
user=produser
password=prodpass
host=prod-db.example.com

[mysql]
database=YourDataBase
  1. Source your shell configuration file or restart your terminal.

Benefits

  • Brevity: No need to type connection parameters (-h, -u, -p) repeatedly, as they're stored in your config file.
  • Flexibility: Pass any MySQL options like -N (skip column names) or -e (execute) alongside environment selection.
  • Consistency: Maintain the standard MySQL command syntax for direct option usage.

This simple function has saved me countless keystrokes and made database work significantly smoother. It's especially handy for running quick queries with options like -e (execute) and -N (no headers) without having to type connection details every time. Give it a try in your workflow—small improvements like this add up to a much more efficient development experience!

Do you have any favorite shell functions that make your development life easier? Share them in the comments!

网友语录 - 第27期 - 挥霍和珍惜是同一件事情

这里记录我的一周分享,通常在周六发布。


只有规则恰当时,人们才遵守他们。脱离实际的规则还不如墙上的一幅风景画。


长期来看,在吃和锻炼上多花点钱,能有效的减少对医院和药店的资助。不过太多人(也有我)看不到这一点。拼啊,省啊,最后都替医院打工了。


人类擅长辨认,不擅长回忆。


Geekplux 我发现我越来越喜欢用年为单位去描述事情,可能这就是时间加速感的体现。希望自己能在未来的日子里:

保持好奇,保持谦逊,保持怀疑精神 接受随机,接受老化,接受自我平庸

https://geekplux.com/posts/two-years-in-usa 来美国的两年后 - GeekPlux Data Visualization & Full-stack programmer @ finance firm, always exploring


有犯错的自由,是我平生所愿。


头(head)的职能主要是思考。


王海鹏seal 如何改变世界?世界不过是自己的内心。


Marskay 有的人看起来方方正正规规矩矩,其实只是因为装在盒子里,盒子一拆掉他就像史莱姆一样流出来迅速往四面八方摊平。(一起旅行是不是就能拆掉盒子?)


What an astonishing thing a book is. It’s a flat object made from a tree with flexible parts on which are imprinted lots of funny dark squiggles. But one glance at it and you’re inside the mind of another person, maybe somebody dead for thousands of years. Across the millennia, an author is speaking clearly and silently inside your head, directly to you. Writing is perhaps the greatest of human inventions, binding together people who never knew each other, citizens of distant epochs. Books break the shackles of time. A book is proof that humans are capable of working magic.

https://letters.geekplux.com/41/ GeekPlux Letters


野小合 高中舍不得用的本子,现在翻出来没有任何用处。终于理解了挥霍和珍惜是同一件事情。真正的珍惜或许不是供奉,而是让美好的事物参与我们的生命流动,有花堪折直须折。


设计是在生命周期特定阶段发生的事情,还是分布在所有阶段?Brooks:它集中发生在迭代开发的前面几次迭代过程,有时也发生在所有过程中。在第一次迭代中,总体架构是中心问题,接下来设计多集中于更细节的层面,除非人们意识到需求已改变或者发现了新的机会。《设计原本》


我说最后一点一一目前你不是非得找对目标,你只要找对道路和办法,比如... 说真的,船到桥头自然直。


13 靠AI開始寫程式、文案、圖片,其實是很棒的起點。 但這些速成作品看多了,會發現:決定成品水準的, 還是創作者的鑑賞力。 自己看不出問題,就無從改進。

前幾天我跟我妹聊到這件事。她是完全不懂程式的藝術人。 我說:「很多人用AI寫程式,好像很快就能衝上一座小山丘。

但到了山頂之後,反而不知道下一步要往哪走。其實接下來要下坡,才能去爬更高的山。」 她秒回:「衝那么快,感覺是騎電動腳踏車欸--而且還是幹來的!」

害我在客美多笑到停不下來,差點聊不下去。

這比喻太妙了,還正好呼應 Steve Jobs那句:

「個人電腦是心智的腳踏車。」

Al也是能幫助人創造很多東西的工具。關鍵是你怎麼用、會不會用。

最近我思考的問題,已經不是怎麼樣用Al提升生產力。而是:怎樣持續強化自己的鑑賞力。

不管是軟體、寫作,還是美感。


Marskay 我不预设对方是不是不喜欢我,我不预设这句话是不是话里有话,我只跟对方进行自然的沟通,如果遇到什么问题,那我就坦诚沟通,就事论事。也不要担心对方会不会因为我的发问产生偏见。不惧怕坦诚沟通,这是筛选的过程。你坦诚,留下的自然就是坦诚的人。


频繁纠正他人,哪怕只是在不起眼的小事上,也会打击他的自信心和主动性。

这种干预,本质上是一种控制。长期处于这种环境,人会变得迟钝、依赖、懒惰,甚至失去自我。

这一规律适用于一切人际关系。无论你是被过度纠正者,还是施加纠正者,都应学会识别并警惕这种行为。


米饭 ...有上万张照片以后,具体某张照片多好看不那么重要,重要的是能讲述历史。


什么是设计?什么构成设计要解决的问题?设计就是脚踏两个世界,即技术的世界和 人及其意愿的世界,设计人员努力要做的是把两者结合到一起。

我们来看一个例子。 建筑师(不是建筑工程师)是一种专门职业,全面负责建筑的修建。建筑与工程作为学科是相互对等的,但是在实际设计和修建建筑的过程中,工程师要接受建筑师的指示。

工程师在这个过程中要发挥至关重要的作用,但是他们要服从建筑师所确定的建筑设计的基本要求。

当人们想要设计一所房子时,首先要找建筑师,不是工程师。为什么?因为成为好建筑的要素在很大程度上不是工程所要解决的问题。人们要求卧室安静以便能够睡个好觉,要求餐厅靠近厨房。餐厅靠近厨房这个事实首先来自知识,来自厨房的用途是准备食品,餐厅用于消费食品。其次,有相关用途的房间在空间上应该靠近。这不是一种事实,也不是技术问题,这是一种设计智慧。


很多认为自己是干软件设计的人恰恰缺少有效参与总体过程的技术基础。很自然,程序员很快就会失去对不能理解基本技术问题的人的尊敬。对这个问题的答案不是把设计人员排除在总体过程之外,而是要确保他们掌握技术基础知识,以便能够与程序员进行真正的沟通。

为学生设计人员设计的技术课程应该涉及计算机程序构建的原则和方法,包括计算机系统体系结构、微处理器体系结构、操作系统、网络通信、数据结构与算法、数据库、分布式计算、程序设计环境和面向对象的开发方法论。

设计人员必须具备至少一种现代程序设计语言(C或Pascal)的坚实的实用知识,此外 还要接触过很多不同的语言和工具,包括Forth和Lisp。(这本书真是够老,那会儿估计Java都还没有诞生)《软件设计的艺术》


设计人员必须研究如何把软件设计集成到整个软件开发过程中,集成到程序员、系统 结构设计师和技术管理团队的实际现场条件中。

一般来说,项目的编程和设计活动必须密切关联。在实现设计的过程中,会出现新的信息,在很多情况下这些信息会改变原来的设计。如果设计和实现都是封闭的,则会变成一场灾难,因为不能实施细化和变更过程。 设计和实现密切关联这种事实并不意味着两者是一样的,即使两种任务有时由同一个人完成。编写代码的技术要求常常要程序员如此投入,以至于程序员会看不到影响产品设计的更大问题。


#laugh 萧覃含 朋友说,“放一首《我们不再讨论动物》”,我拿手机边查边问,“这是啥歌,新歌吗”,结果经查证,是《We Don't Talk Anymore》。

网友语录 - 第26期 - 我们是历史的燃料。没有我们这些燃料,历史就不会前进

这里记录我的一周分享,通常在周六发布。


奥利奥不知道 我也好想小猫ᓚᘏᗢ

(人类的创造力啊!已经溢出屏幕)


设计就是把如何控制表达清楚。


实现设计是发现设计瑕疵最有效的方法。如果你觉得一个设计不对劲但说不出哪儿不对劲,实现它。很快你就会发现那个点,改正它。太早开始编码不可取,太晚编码同样不可取。花更多的时间来做设计,只能在一定程度上减少设计错误。在大问题明确后就开始搭“框架”,编写基础代码,小步快跑,积极改正实践中发现的设计错讹,是致胜的“法宝”。


见了便做,做了便放下,了了,有何不了。 慧生于觉,觉生于自在,生生,还是无生。

-- 文殊院的对联。

一品香菇炖鸡 比起执念所造成的精神内耗,见了便做真的是最好的解法。


我看到的好多搞杂了的事情,并不是没有能力做好,而是坏在赶工,责任心缺失,还有浮躁上。这是谁的错?地铁里,马路上每个人都急急火火,天天都只争朝夕,行吗?


想说“让我们想想”的时候,就把它换成“让我们决定”。是的,做决定。不要去等完美的方案,决定,然后去做。


我相信,承认自己的无知有重大的意义。事实上,在我们的生命之中,当我们做一个决定时,我们不必一定要知道我们是在做一个正确的决定;我们只是想,我们是在尽可能做好,以及这是我们应该做的。


熊猫姐 好美! 转@七禧 多年前无意扔到老妈家楼下空地的一枚杏核,去年已经能收获几斤小甜杏了,今年又开了满树的花。。。小区菜园里忙春耕的老太太们连免费鸡蛋都不去领了,干完活坐在花树下憧憬着今年能收多少杏

image


吉永雪 “小的时候,在我看来,奢侈品是毛皮大衣,是长裙,是海边的别墅。后来,我又觉得是一种知识分子的生活。而现在,我觉得是可以对某个男人或者女人抱有一种激情。”


钢盅郭子 平淡其实是很奢侈的,那意味着有许多爱你的人在为你付出。


西瓦 这不巧了,刚听了一期icu大夫讲icu的播客,说“进icu是为了出icu”,有机会活下去的人才进 转@熊猫姐 结论我同意,但“凡是进ICU的他没有见到一个活着出来的”这就过分了啊。转@野小合 华西医院的护工给我说,凡是上呼吸机的九死一生,凡是进ICU的他没有见到一个活着出来的。

夏语冰96 25-4-9 14:39 发布于 北京 来自 微博网页版

2020年秋,凌晨两点接到医院电话,说岳父不成了,要我们马上赶到医院。
大约十五分钟后就到了医院。他神智清醒。医生说要么进ICU要么可能熬不到日出。他第一个问题是:ICU多少钱?
医生悄悄告诉我价格。我对岳父说:一个月6000块钱。因为我知道那是他感觉能支付得起的价格。
他用力频频点头,拼尽全力说了三个“去”字。
但那也是他最后一次能说话。
两天后我再去,他满身都是管子,只能张开眼看着我。问什么就是点头摇头。
一周后,他对问题已经没什么太大反应。
等半个月,老婆去探望,他对自己最疼爱的女儿,给出的反馈就是轻轻动一下头而已。(那时候探望病人不容易,要做核酸要有健康码,而且一旦有什么“密接”,整个单位都比较麻烦。所以,既然一开始我去,就始終是我去。)
三个月以后,凌晨6点,医生来电:见最后一面吧。
我们到了。也就是见最后一面,因为他对外界已经没有任何反应。
8点去世。抱他到殡仪馆的推床上,他的手还是温的,这也导致我后期好几次做梦,都是他还活着,拉着我的手聊天,我梦里还是感受到那个温度。
他一辈子节约,因为下乡的时候吃过太多苦。总害怕将来有一天还是吃不饱。我跟妹夫关系从那时到现在一直很糟糕,就因为支持他进ICU是老婆的想法,我肯定支持老婆。但妹夫觉得没必要浪费那么多钱。
昨天夜里做梦,又梦到他,梦到那个温度。一下子惊醒,想到他已经去世4年多。
那一瞬间,不是怀念跟他共处了十几年的岁月,而是想到,如果有一天我也面临死亡,是否能够选择有尊严的离去而不是满身插满管子勉强维持。某种程度上,我觉得妹夫反而是正确的。


潘文扬:“我们以为我们是历史的见证者,其实我们是历史的燃料。没有我们这些燃料,历史就不会前进。”


fomalhaut 困在工位上,春天就只是PPT上的第一季度

image


米饭 成也统筹,败也统筹。我工作效率的显著提高,是多年前有意识的使用统筹方法。多年后的焦虑情绪,也常常因为想要统筹多件事,一旦有事情脱离计划,就要重新规划。后来我发现,重要的事按顺序完成,放弃规划次要的事,也是不错的。

摄影和绘画(也许写作也是)是看到别人“视而不见”的事物,再用有表现力的形式表达出来。这个形式是艺术家创造的语言,不同的艺术风格则是不同的方言。

网友语录 - 第25期 - 不要美化你没走过的那条路

这里记录我的一周分享,通常在周六发布。


王天霖 生命力是「算了」的反义词。

(依稀听到“哎医生我还可以挽救一下”的呼叫声)


因为无知,所以无畏;因为无畏,所以披荆斩棘;很多时候,我们不能前进,并不因为是前面多艰难,而是我们自己的胆怯和畏惧。恰恰无知者会忽略这些,他们艰难前行,他们终达彼岸。


编程不是随便看两本书就能干的工作, 它相当专业,需要很认真的学习和实践。要成为行家里手,需要很勤奋的耕耘,自发的流汗,如是持续上好多年。

2025-03-31 补充: 上面是我14年前的笔记。如今编程成了AI的强项之一。今天的AI一定程度上还需要人类程序员把关,但不久之后它就能自己给自己把关。已经有一些对编程一知半解的人糊出能跑但不知为什么能跑的app,他们称之为vibe coding。这挺悲哀的。我讨厌那一天的到来,因为那意味着人类正式放弃理解AI生成的代码。那一天将是人类社会崩塌的开始,人类将会随之放弃更多的东西。

然而不管怎样,真懂编程的人总是稀缺的,稀缺常常意味着更有价值。今天努力的成为一个真懂编程的人,你才有机会成为能更好的洞悉AI代码世界的人。


很多时候,可能超出你的想象,我们坚信的东西,或者直觉,其实是不正确的,所以我们需要度量,甚至度量你觉得没必要度量的东西。--Deutsch


努力把东西做出来,做出东西会让你激动并得到快乐。即使一开始是错的,不要紧。一旦它做出来了,就会开始告诉你怎样能更好。


不主动,不作为,在一个平等竞争的环境中,必然靠边站。


loveisbug 幸福与贫富无关,与内心相连。


人生有两贵:一贵有自知之明,二贵持之以恒。 --来自今天(2012-04-02)的《谁在说》节目,施刚老师。


nobodynowhere 近年来获得的最强人生智慧就是睡一觉可以解决绝大多数并不迫切威胁你生活的虚假问题,睡一觉起来大脑就把昨晚借着焦虑和牛角尖给你制造的很多废料自动清除掉了,到底问题客观上有多严重其实无所谓,影响当下生活体验的是大脑感知而已,焦虑的人更要理解,一颗焦虑感高的大脑类似于一个会在大街上突然发出刺耳尖叫的小孩,和它讲道理作斗争意义不大,也不必理解它到底什么思路逻辑,不如直接一根硕大的彩色棒棒糖送它sugar high去


一个人应该懂得如何更换尿布、策划战争、杀猪、开船、设计建筑、创作诗歌、算清账目、搬砖砌墙、接续断骨、安抚将死之人、听从命令、发布命令、与人合作、独断独行、解方程组、分析前所未见的问题、清理肮脏的畜栏、编写计算机程序、烹制美味佳肴、高效地战斗,并勇敢地死去。「专业化」是为虫子准备的。

-- 罗伯特·海因莱因《时间足够你爱》


一个人如果不看书, 那么他的价值观就由他身边的人决定, 因为他没有别的输入途经, 只能模仿身边的人, 或者慢慢被环境所改变。 周围流行什么就跟随什么, 永运找不不到自己。

读书是富养自己的灵魂,读过的书, 哪怕内容不记得, 但它依然存在于谈吐中,在气质里, 在胸襟的无涯和精神的宽广中。

书是向上的阶梯, 是治愈的良药, 是启迪智慧的良方, 是唤醒心智的道场。


Marskay 读到博尔赫斯说:「追求平静在我看来是一种比追求幸福更合理的野心。」这是真的,长大之后,我发现没有什么比安心地躺在床上玩手机、追剧、昏睡过去、工作群里静悄悄没有任何消息要更快乐的事了。平静就是最大的幸福。

太在意别人的视线和评价,才会不断寻求别人的认可。对认可的追求,才扼杀了自由。由于不想被任何人讨厌,才选择了不自由的生活方式。换言之,自由就是不再寻求认可。


不要等到有了灵感才干活。灵感总是闪现于行动过程当中。灵感很少光顾懒得行动的人。


我认为他的动力并非是“计算机”,也绝不是名声和财富,而是诚实的好奇心和征服困难的愿望,他总是想出最好的办法解决问题,他绝不后退。--安娜(Linus的妈妈)


宏大建筑中最细小的部分,如关不紧的门﹑有点不平的地板,甚至是凌乱的桌面,都会将整个大局的魅力毁灭殆尽。--Coplien


你的孩子不是你的孩子/他们是渴望生命自身的儿女/他们经过你来到这世上而不是从你而来/尽管他们和你在一起,但不属于你/给予你的爱,但不是你的思想/因为他们有自己的思想 --摘自纪伯伦《先知》


孩子通过观察我们来学习,我们的形象帮助(或阻碍)他们成为他自己。--鲁道夫・斯坦纳


爱是一种与他人相处的法则——对个体充分尊重,把他们的需要放在首位,而不图回报。爱是我们创造的容纳空间,为了让被爱的人的潜能得到充分发展。

爱是带着感情的理解,是带着理解去感觉事物的能力。它既不是未经悟性引导的盲目情绪,也不是冷冰冰的理性逻辑。正如列奥纳多•达•芬奇所说:“伟大的爱出自伟大的理解。”

真正的爱是利他的,绝对不会是自私的。


素袖藏金 不要美化你没走过的那条路。

是幸运,也是“必然”

今天我突然想到,“幸运”其实并不神秘。它只是一种相对罕见的结果。如果我们掷骰子,只要连续掷个几百次,总会有一两次“六连六”这样的神奇组合。这种幸运,从概率的角度来看,只是一件迟早但必定会发生的事情。

从宇宙这样的广度来看,每一分每一秒生物界的“上帝”都在“掷骰子”(基因突变),只要时间足够长,每一个看似根本“不可能”的事件,都必定会出现,而且会重复出现。幸运,并不违反规律。

那些“幸运”的人,或许他们只是早一步遇上了本就会出现的那颗“六”。

人生当然不是掷骰子这样简单。但我们都知道,如果一个骰子的六个面都是六,那么你每一次掷骰子都会得到六。

你持续不断的学习,就是在暗暗地将骰子的每一个面打磨得越来越接近六。每一次做决定,都是一次尝试;失败了也没关系,只要你不停止尝试,你就在不断提升自己下一次“掷中六”的几率。

你不能够确切地知道那颗六什么时候来,但你总能够把自己塑造成一个越来越有把握投出六的人。