Skip to content

MySQL 数据库

官方文档地址:https://dev.mysql.com/doc/

客户端推荐

命令行客户端

mysql

bash
# 连接 mysql
mysql -h {host} -u {user} -p

# 执行 sql
mysql -h {host} -u {user} -p -e "show databases;"

mysqlsh

bash
# 输出 json 格式
mysqlsh -h {host} -u {user} -p -D {dbname} -e "select * from mytest limit 10;" --sql --json
  • mysqlsh 是 mysql8.0 推出的增强 mysql 命令行工具,较 mysql 命令提供了更丰富的功能

python 库

简单代理

此处简单代理的含义是指,可以通过这个代理来开发数据库的临时权限
可供给研发人员使用,提供测试、生产库的临时只读、读写权限

  • mysql-proxy 早期 mysql 官方推出的一个中间件
  • dbgate 使用灵活,提供了 web 方式

SQL 审核

  • goInception
  • 提供了二进制文件、docker 方式,部署使用非常简单

goInception是一个集审核、执行、备份及生成回滚语句于一身的MySQL运维工具, 通过对执行SQL的语法解析,返回基于自定义规则的审核结果,并提供执行和备份及生成回滚语句的功能。

docker-compose 启动 mysql

yaml
version: "3"

services:
  mysql:
    image: mysql
    restart: always
    command: --default-authentication-plugin=mysql_native_password --mysqlx=0
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    ports:
      - "3306:3306"
    volumes:
      - "/data/mysql/db:/var/lib/mysql"

创建用户并授权

sql
CREATE USER IF NOT EXISTS `nacos`@`%`;
ALTER USER 'nacos'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
GRANT ALL PRIVILEGES ON `nacos_config`.* TO `nacos`@`%`;
GRANT USAGE ON *.* TO `nacos`@`%`;
  • 上述是创建了一个名为 nacos 的账号,并赋予了管理 nacos_config 库的权限

备份恢复/导入导出

bash
# 导出所有表结构,加上 -d 不导出数据
mysqldump -h{host} -u{user} -p'{passwd}' -d {db} > {fpath}

# 导出多个表格的结构和数据;可以添加多个表格,表格之间以空格分隔
mysqldump -h{host} -u{user} -p'{passwd}' {db} {tables} >> {fpath}

# 导入数据,从导出的 sql 文件中导入
mysql -h{host} -u{user} -p'{passwd}' {db} < {fpath}
  • mysqldump 还可以加上 --complete-insert 参数,加上后可以在导出的 insert 中写明列名,防止目标库与源库类顺序不一致导致的问题

导出用户的创建与授权语句

bash
# 通过 -- only {username} 得到指定用户的创建与授权语句
./pt-show-grants -h {host} -u {user} -p"{passwd}" --only nacos

部分 sql 语句记录

sql
-- 将 content 字段中的 abc 全部更换为 xyz
UPDATE table1 SET content = replace(content, 'abc', 'xyz') where id > 100;