我造了个轮子,mysql 命令行的客户端 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
nilai
V2EX    分享创造

我造了个轮子,mysql 命令行的客户端

  •  
  •   nilai 2024-03-1 08:01:22 +08:00 3618 次点击
    这是一个创建于 583 天前的主题,其中的信息可能已经有所发展或是发生改变。

    mysql-go

    mysql-go


    为什么有这个轮子

    • 在维护服务器时,一般需要进行 mysql 连接相关的测试,有的没有安装 mysql, 安装官方的 mysql 太麻烦,我想一个文件能搞定,无库文件依赖,全静态编译的单文件
    • mysql 官方的命令行客户端没有静态编译的版本(网上也没找到) (如果能提供类似需求的功能完善的轮子更好)
    • 一般紧急临时用,mysql 官方的命令行客户端体积很大,几百 M
    • 日常管理还是建议使用 navicate 之类的客户端

    仓库地址

    Feature

    • 类似 linux 下的 grep,这样在管理过程中就少写一些 where,like 等
    mysql> show variables; | grep log_bin Variable_name Value log_bin ON log_bin_basename /var/lib/mysql/binlog log_bin_index /var/lib/mysql/binlog.index log_bin_trust_function_creators OFF log_bin_use_v1_row_events OFF sql_log_bin ON 6 rows in set (0.01 sec) 

    mysql> show variables; | grep binlog

    • 类似 linux 下的 grep -v 排除过滤
    mysql> show processlist; | grepv sleep Id User Host db Command Time State Info 5 event_scheduler localhost NULL Daemon 1902954 Waiting on empty queue NULL 115 root 192.168.3.101:63598 NULL Query 0 init show processlist 2 rows in set (0.00 sec) 

    使用例子 基本跟官方的用法一至

    mysql -uroot -p123456 -h127.0.0.1 -P3306 mysql -u root -p 123456 -h 127.0.0.1 -P 3306 mysql -uroot -p123456 -h127.0.0.1 -P3306 -Ddbname mysql -uroot -p123456 -h127.0.0.1 -P3306 -f xxx.sql mysql -uroot -p123456 -h127.0.0.1 -P3306 -Ddbname < xxx.sql mysql -uroot -p123456 -h127.0.0.1 -P3306 -Ddbname -e 'select * from users limit 10;' 

    安装

    wget https://gitee.com/tinatmp/mysql/releases/download/mysql/mysql_linux -O /usr/local/bin/mysql chmod +x /usr/local/bin/mysql 

    其它

    • 兼容 mysql5.7 mysql8 tidb
    • 测试不全,可能存在 bug
    29 条回复    2024-03-13 18:00:54 +08:00
    ZeekChatCom
        1
    ZeekChatCom  
       2024-03-13 08:05:34 +08:00 via iPhone
    就包管理器安装一下客户端就可以了呀,又不需要完整安装 server ,有何复杂的?
    Comyn
        2
    Comyn  
       2024-03-13 08:08:12 +08:00
    和 mycli 优势在哪里
    nilai
        3
    nilai  
    OP
       2024-03-13 08:16:56 +08:00
    @Comyn mycli 我看了一下 功能很强大, 但是跟我的需求不想符, 我主要需要的就是 单文件 静态编译 无其它库文件依赖, 我只要能连接上能执行基本的 sql 命令就行
    nilai
        4
    nilai  
    OP
       2024-03-13 08:18:04 +08:00
    @ramirezyolis808 正常来说是这个道理, 可我接触的有的服务器是没有外网的, 没法直接 apt-get yum dnf 等操作
    Rehtt
        5
    Rehtt  
       2024-03-13 08:18:21 +08:00 via Android   1
    nilai
        6
    nilai  
    OP
       2024-03-13 08:25:05 +08:00
    @Rehtt 感谢提供, 这个我看了一下, 这个功能更强大了, 我看它是基于 python 开发的, 它的依赖库估计不少,python 程序用 py2exe pyinstaller 类似的打包的话,一个体积太大, 另一个我曾经碰到过打包后可能存在兼容性问题, 我主要需要的就是 单文件 静态编译 无其它库文件依赖
    miniliuke
        7
    miniliuke  
       2024-03-13 08:50:37 +08:00
    可以做个支持多种库的还是有点用的.......光支持 mysql 和官方的区别不大
    bashbot
        8
    bashbot  
       2024-03-13 08:54:04 +08:00
    没有外网的服务器但是允许你传文件上去?
    这种情况遇到的比较少,遇到封网的服务器至少 scp 和拷贝粘贴也会禁掉,一般都是封端口加跳板机登录。
    ltmst
        9
    ltmst  
       2024-03-13 08:54:06 +08:00
    收藏了
    在一定特殊情况下可能会用到
    sakilascott
        10
    sakilascott  
       2024-03-13 08:58:03 +08:00 via Android
    mysql 官方的 tar 包和 zip 包,解压后找到 bin 目录就能直接用,不需要安装啥的啊。。。。
    iyiluo
        11
    iyiluo  
       2024-03-13 09:20:03 +08:00   1
    有用,很多生产环境不能联网,只允许通过堡垒机上传文件,但是自己装软件要处理一堆依赖冲突,特麻烦,这个时候有一个一键执行的程序很方便
    nilai
        12
    nilai  
    OP
       2024-03-13 09:25:07 +08:00   2
    @iyiluo 终于有人能明白我的痛点,刚需了, 其它人都在扯功能,跟官方的区别
    superchijinpeng
        13
    superchijinpeng  
       2024-03-13 09:31:54 +08:00
    官方提供了 binary 无依赖离线包: https://dev.mysql.com/downloads/shell/
    FrankAdler
        14
    FrankAdler  
       2024-03-13 09:36:31 +08:00 via Android
    有 sql 补全吗
    idontnowhat2say
        15
    idontnowhat2say  
       2024-03-13 09:38:27 +08:00 via iPhone
    有用,但我记得官方的 tar 包 bin 里的客户端没有动态库的依赖,可以直接用,你试试看
    nilai
        16
    nilai  
    OP
       2024-03-13 09:42:52 +08:00
    @superchijinpeng 不可否认,mysqlsh 是一个非常强大的命令行工具, 它是用来准备替换 mysql 的, 它支持 python js 两种引擎, 它为 mgr 集群 主从同步提供了非常便利的操作, 我也一样在用它, 但是安装它稍微要麻烦一点点, 需要解压到目录,以及设置环境变量, 另外,mysqlsh 并不是完全的无依赖, 不信请看
    root@cdfea3ff6ac5:/opt/test/mysql-shell-8.0.36-linux-glibc2.12-x86-64bit# ls /opt/test/mysql-shell-8.0.36-linux-glibc2.12-x86-64bit
    bin lib libexec share
    root@cdfea3ff6ac5:/opt/test/mysql-shell-8.0.36-linux-glibc2.12-x86-64bit# ldd /opt/test/mysql-shell-8.0.36-linux-glibc2.12-x86-64bit/bin/mysqlsh
    linux-vdso.so.1 (0x00007fff30ea2000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f19e2d3d000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f19e2d38000)
    libcrypto.so.3 => /opt/test/mysql-shell-8.0.36-linux-glibc2.12-x86-64bit/bin/../lib/mysqlsh/libcrypto.so.3 (0x00007f19e2600000)
    libssl.so.3 => /opt/test/mysql-shell-8.0.36-linux-glibc2.12-x86-64bit/bin/../lib/mysqlsh/libssl.so.3 (0x00007f19e2200000)
    libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f19e2d27000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f19e2d20000)
    libssh.so.4 => /opt/test/mysql-shell-8.0.36-linux-glibc2.12-x86-64bit/bin/../lib/mysqlsh/libssh.so.4 (0x00007f19e1e00000)
    libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f19e2d1b000)
    libpython3.10.so.1.0 => /opt/test/mysql-shell-8.0.36-linux-glibc2.12-x86-64bit/bin/../lib/mysqlsh/libpython3.10.so.1.0 (0x00007f19e1800000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f19e2c3c000)
    libantlr4-runtime.so.4.10.1 => /opt/test/mysql-shell-8.0.36-linux-glibc2.12-x86-64bit/bin/../lib/mysqlsh/libantlr4-runtime.so.4.10.1 (0x00007f19e1400000)
    libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f19e11e6000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f19e2c1a000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f19e1005000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f19e2d46000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f19e2bfb000)
    libgssapi_krb5.so.2 => /opt/test/mysql-shell-8.0.36-linux-glibc2.12-x86-64bit/bin/../lib/mysqlsh/libgssapi_krb5.so.2 (0x00007f19e0c00000)
    libkrb5.so.3 => /opt/test/mysql-shell-8.0.36-linux-glibc2.12-x86-64bit/bin/../lib/mysqlsh/libkrb5.so.3 (0x00007f19e0800000)
    libk5crypto.so.3 => /opt/test/mysql-shell-8.0.36-linux-glibc2.12-x86-64bit/bin/../lib/mysqlsh/libk5crypto.so.3 (0x00007f19e0400000)
    libcom_err.so.3 => /opt/test/mysql-shell-8.0.36-linux-glibc2.12-x86-64bit/bin/../lib/mysqlsh/libcom_err.so.3 (0x00007f19e0000000)
    libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007f19e25f4000)
    libkrb5support.so.0 => /opt/test/mysql-shell-8.0.36-linux-glibc2.12-x86-64bit/bin/../lib/mysqlsh/libkrb5support.so.0 (0x00007f19dfc00000)
    libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007f19e25eb000)
    Jisxu
        17
    Jisxu  
       2024-03-13 09:44:38 +08:00   2
    https://github.com/xo/usql
    你是否在寻找这个项目
    nilai
        18
    nilai  
    OP
       2024-03-13 09:46:14 +08:00
    @FrankAdler 没有, 我尝试过的, 能实现, 但是有点麻烦, 不想花费太多时间在这个上面上。
    nilai
        19
    nilai  
    OP
       2024-03-13 09:54:48 +08:00
    @Jisxu 感谢, 这个项目不错,比我写的这个轮子不知道要高明到哪里去了, 这个我看了一下,稍要学习一下怎么用,目前我下载了测试了一下, 发现 (not connected)=> my://root:[email protected]:4000/test 一直停留在这里,感觉没有连接上一样,状态一直是 not connected ,数据库的连接信息确认是对的, 可能需要一点点学习成本,我有空研究一下
    yemoluo
        20
    yemoluo  
       2024-03-13 10:04:38 +08:00
    不错,我用着,我也想打包一个命令行,随时可以使用的那种
    sparkssssssss
        21
    sparkssssssss  
       2024-03-13 10:08:16 +08:00
    mysql shell 内可以 grep,确实很方便,好评
    nilai
        22
    nilai  
    OP
       2024-03-13 10:13:32 +08:00
    @coolloves 是的, 跟操作 linux 命令行一样 grep 操作, 这样子就可以少写一些 where 语句 like 语句, 这样子要方便一些
    defunct9
        23
    defunct9  
       2024-03-13 10:17:23 +08:00
    usql 赞了,楼主这个也要赞一个。确实好用。某些程序员程序部署的时候,就一句,联不通。擦的,上去给他装个 msyql client 测试,事后永远也用不到,还得卸载,这个太难受了。不如这个上去测一把,通了就删掉好用。
    changnet
        24
    changnet  
       2024-03-13 10:19:55 +08:00
    @iyiluo 可是生产环境,软件的稳定性谁来评估?如果出 bug ,比如把某个数据删了。如果是官方的,那这个是经过公司认可的开源软件,出问题整个团队负责。个人的软件到时候谁来背锅?

    我们的生产环境,运维默认只从官方下载对应的版本。自编译或者第三方的软件除非官方没有或者没有其他解决方案,否则不会装
    saka0609
        25
    saka0609  
       2024-03-13 10:49:08 +08:00
    提个建议,构建好的二进制不要直接推送到仓库,走 release 或者 lfs 都行
    OneNian
        26
    OneNian  
       2024-03-13 10:54:19 +08:00
    有和你一样的需求,我的解决方法是 docker 打包了一套常用工具,里面包含 mysql 和 psql 等客户端和一些网络调试工具之类等等等
    usboy
        27
    usboy  
       2024-03-13 10:56:17 +08:00
    支持 rlwrap 吗
    bjfane
        28
    bjfane  
    PRO
       2024-03-13 15:37:58 +08:00
    一个文件完全命中我的 G 点,哈哈哈,点个赞,star 一下。
    keepfun
        29
    keepfun  
       2024-03-13 18:00:54 +08:00
    类似的
    https://github.com/danvergara/dblab
    https://github.com/johejo/go-mysql-client

    不过这工具的确是有需要 我经常用
    因为有时候 机器没有安装 mysql client 的权限 这个时候就需要这样一个工具
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2912 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 10:58 PVG 18:58 LAX 03:58 JFK 06:58
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86