V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
nilai
V2EX  ›  分享创造

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

  •  
  •   nilai · 255 天前 · 3120 次点击
    这是一个创建于 255 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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  
       255 天前 via iPhone
    就包管理器安装一下客户端就可以了呀,又不需要完整安装 server ,有何复杂的?
    Comyn
        2
    Comyn  
       255 天前
    和 mycli 优势在哪里
    nilai
        3
    nilai  
    OP
       255 天前
    @Comyn mycli 我看了一下 功能很强大, 但是跟我的需求不想符, 我主要需要的就是 单文件 静态编译 无其它库文件依赖, 我只要能连接上能执行基本的 sql 命令就行
    nilai
        4
    nilai  
    OP
       255 天前
    @ramirezyolis808 正常来说是这个道理, 可我接触的有的服务器是没有外网的, 没法直接 apt-get yum dnf 等操作
    Rehtt
        5
    Rehtt  
       255 天前 via Android   ❤️ 1
    nilai
        6
    nilai  
    OP
       255 天前
    @Rehtt 感谢提供, 这个我看了一下, 这个功能更强大了, 我看它是基于 python 开发的, 它的依赖库估计不少,python 程序用 py2exe pyinstaller 类似的打包的话,一个体积太大, 另一个我曾经碰到过打包后可能存在兼容性问题, 我主要需要的就是 单文件 静态编译 无其它库文件依赖
    miniliuke
        7
    miniliuke  
       255 天前
    可以做个支持多种库的还是有点用的.......光支持 mysql 和官方的区别不大
    bashbot
        8
    bashbot  
       255 天前
    没有外网的服务器但是允许你传文件上去?
    这种情况遇到的比较少,遇到封网的服务器至少 scp 和拷贝粘贴也会禁掉,一般都是封端口加跳板机登录。
    gbw1992
        9
    gbw1992  
       255 天前
    收藏了
    在一定特殊情况下可能会用到
    sakilascott
        10
    sakilascott  
       255 天前 via Android
    mysql 官方的 tar 包和 zip 包,解压后找到 bin 目录就能直接用,不需要安装啥的啊。。。。
    iyiluo
        11
    iyiluo  
       255 天前   ❤️ 1
    有用,很多生产环境不能联网,只允许通过堡垒机上传文件,但是自己装软件要处理一堆依赖冲突,特麻烦,这个时候有一个一键执行的程序很方便
    nilai
        12
    nilai  
    OP
       255 天前   ❤️ 2
    @iyiluo 终于有人能明白我的痛点,刚需了, 其它人都在扯功能,跟官方的区别
    superchijinpeng
        13
    superchijinpeng  
       255 天前
    官方提供了 binary 无依赖离线包: https://dev.mysql.com/downloads/shell/
    FrankAdler
        14
    FrankAdler  
       255 天前 via Android
    有 sql 补全吗
    idontnowhat2say
        15
    idontnowhat2say  
       255 天前 via iPhone
    有用,但我记得官方的 tar 包 bin 里的客户端没有动态库的依赖,可以直接用,你试试看
    nilai
        16
    nilai  
    OP
       255 天前
    @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  
       255 天前   ❤️ 2
    https://github.com/xo/usql
    你是否在寻找这个项目
    nilai
        18
    nilai  
    OP
       255 天前
    @FrankAdler 没有, 我尝试过的, 能实现, 但是有点麻烦, 不想花费太多时间在这个上面上。
    nilai
        19
    nilai  
    OP
       255 天前
    @Jisxu 感谢, 这个项目不错,比我写的这个轮子不知道要高明到哪里去了, 这个我看了一下,稍要学习一下怎么用,目前我下载了测试了一下, 发现 (not connected)=> my://root:[email protected]:4000/test 一直停留在这里,感觉没有连接上一样,状态一直是 not connected ,数据库的连接信息确认是对的, 可能需要一点点学习成本,我有空研究一下
    GTim
        20
    GTim  
       255 天前
    不错,我用着,我也想打包一个命令行,随时可以使用的那种
    coolloves
        21
    coolloves  
       255 天前
    mysql shell 内可以 grep,确实很方便,好评
    nilai
        22
    nilai  
    OP
       255 天前
    @coolloves 是的, 跟操作 linux 命令行一样 grep 操作, 这样子就可以少写一些 where 语句 like 语句, 这样子要方便一些
    defunct9
        23
    defunct9  
       255 天前
    usql 赞了,楼主这个也要赞一个。确实好用。某些程序员程序部署的时候,就一句,联不通。擦的,上去给他装个 msyql client 测试,事后永远也用不到,还得卸载,这个太难受了。不如这个上去测一把,通了就删掉好用。
    changnet
        24
    changnet  
       255 天前
    @iyiluo 可是生产环境,软件的稳定性谁来评估?如果出 bug ,比如把某个数据删了。如果是官方的,那这个是经过公司认可的开源软件,出问题整个团队负责。个人的软件到时候谁来背锅?

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

    不过这工具的确是有需要 我经常用
    因为有时候 机器没有安装 mysql client 的权限 这个时候就需要这样一个工具
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1544 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 17:17 · PVG 01:17 · LAX 09:17 · JFK 12:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.