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 库
- 推荐使用
pymysql
库 - 可查看这篇文章:PyMySQL 的封装使用
简单代理
此处简单代理的含义是指,可以通过这个代理来开发数据库的临时权限
可供给研发人员使用,提供测试、生产库的临时只读、读写权限
- 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 中写明列名,防止目标库与源库类顺序不一致导致的问题
导出用户的创建与授权语句
- 推荐使用 pt-show-grants 命令
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;