目前包括mysql,mongoDB,redis,clickhouse的基础命令。

mysql

在终端

首先要登录,登录默认用root,也可以用自己已经有的用户,默认root有密码在error.log里,也可以改密码。具体安装和初始化这部分见[【无root权限】远程服务器一些安装和连接]

# 登录。如果默认的可以不用带`-S sock`路径的部分,
mysql -u root -p -S $HOME/.local/bin/mysql-5.7.44/mysql.sock
# 然后输入密码

此时终端会变成mysql>开头,以下命令都是在这里的

<!-- 改root密码 -->
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mysql_lab');
mysql> flush privileges;

<!-- 增添新用户 -->
mysql> CREATE USER 'username'@'%' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'username'@'%';

<!-- 增加远程权限 -->
mysql> use mysql
mysql> select User,authentication_string,Host from user;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';
mysql> flush privileges;

一些常规增删查改命令。都是基于登录基础上

<!-- 创建database -->
mysql> CREATE DATABASE testdb CHARACTER SET utf8; <!-- 不要用`-`,要用`_` -->
<!-- 展示db -->
mysql> SHOW DATABASES;  <!-- 也可以merge:SHOW CREATE DATABASE testdb; -->

<!-- 切换DB -->
<!-- 在进入到某个DB之后,建的表就默认在这个DB里了 -->
mysql>  USE my_other_db;

<!-- 创建一个表 -->
mysql>  CREATE TABLE test (  <!-- 如果想指定DB,这一行就变成 CREATE TABLE dbname.test -->
    id INT PRIMARY KEY,
    name VARCHAR(255),
    create_time TIMESTAMP   <!-- 最后一行不能有`,` -->
);  
<!-- 就直接输入就行了跨行没关系 -->

<!-- 退出 -->
mysql>  exit

如果没登录直接在shell里跑:

# 创建database
mysql -u root -p -e 'create database mydb;'
# 然后输入密码

就举一个例子就行了

在客户端里设置

之前用的是navicat,换电脑之后换成tableplus,好看!好用!
客户端操作没什么说的,按官方文档走就行了。

  • 连接mysql的时候,name可以随便起,host和port对就行了。host填了之后就不用填sock了,database甚至登的时候可以不填。
    ![[Pasted image 20240308105541.png]]

  • 测试了一下增添了一列做主键。添加列和配置好之后,primary key要在name右边那个primary里把column名字填上去。然后ctrl+s保存。
    ![[Pasted image 20240308105818.png]]

python连接

一直用pymysql
具体配置见github/middleware

讲一下连接的一些概念。

  • 断开连接需要close()

  • 最好使用cursor游标连接,处理完要关闭游标

  • 可以在连接的时候设置自动提交事务autocommit,可以设置返回的格式是dict而不是元祖:cursorclass=pymysql.cursors.DictCursor

mongoDB

一般连mongoDB观察了一下都是用docker,docker的部分参阅docker篇,这里默认已经下载好,进入了docker内部。
mongoDB进入之后界面是test>,test表示一个数据库,它权限最高的数据库是admin,新增用户什么的都用这个,下面操作一下初始化部分。mongo 默认没有用户。

<!-- 换到admin数据库 -->
test> use admin

<!-- 新增(超级)用户 -->
admin> db.createUser({
    user: "root",
    pwd: "123456",
    roles: [{ role: "root", db: "admin" }]
})
# 授权登录
admin> db.auth('root', '123456')

<!-- 再给咱创建一个用户 -->
admin> db.createUser({
    user: "myuser",
    pwd: "123456",  <!-- 请换成强密码 -->
    roles: [{ role: "dbAdminAnyDatabase", db: "admin"}]
})

<!-- 创建数据库 -->
<!-- mongo里创建和切换数据库都是这个,不存在则创建,存在则切换 -->
admin> use myDB

<!-- 显示数据库 -->
myDB> show dbs
<!-- ❗️注意新创建的数据库,如果没数据,show dbs是不会显示这个数据库的,因为数据库和集合是“懒惰创建”。 -->

<!-- 插入文档 -->
<!-- insertMany和insertOne都是插入,many插多个,用[],insertOne插一个,用{} -->
db.test.insertMany([
    {
    "name": "Alice",
    "age": 20,
    "courses": ["Math", "History"]
},
    {
    "name": "Bob",
    "age": 22,
    "courses": ["Science", "English"],
    "address": {
        "city": "New York",
        "zip": "10001"
    }
}
]);

<!-- 查看文档 -->
myDB> db.test.find();

角色和用户

MongoDB 的权限是基于数据库级别的。每新建一个数据库,都要手动为某个用户分配权限,这个用户才有这个数据库的访问/操作权限。每个角色当中的权限可以显式指定,也可以通过继承其他角色的权限。

mongo有一个概念:角色 Role。不同角色有不同的数据库操作权限。用户又分为管理员用户和普通用户,在 admin 数据库中创建用户是管理员用户,用于管理整个 MongoDB 实例。而在其他数据库中创建的用户则是普通用户,用于特定数据库的访问控制。
关键问题是,怎么叫 “在admin中创建的用户"呢? 其实就是db.createUser({roles:[{db:"admin"}]})这里的db:“admin"加上就行了。

库,集合和文档

库和mysql的概念类似。

集合,类似于关系数据库中的表,是一组文档的容器。
集合是自动创建的,向一个不存在的集合中插入文档,mongoDB就会自动创建这个集合。
不过,也可以手动创建:db.createCollection("myCollection");

文档,一开始我误解为一个文档就类似于一个.txt,那不就相当于 一个表?但其实!它类似于mysql里的【一行】。
但是更灵活,不用预先设置表结构,而且还可以嵌套。

格式,mongo默认的格式是bson,json导入进去就变成bson。

插入和导入

我弄混了好几个小时!导入系列mongoimport,只能退出mongo shell,而用终端shell操作。mongo shell不能导入。

mongo shell 可执行的操作:

  • 查询:find() 检索文档
  • 插入:insertOne()insertMany() 插入文档
  • 更新:updateOne()updateMany() 更新文档
  • 删除:deleteOne()deleteMany() 删除文档

普通shell 可执行的mongo命令行工具:

  • 导入 mongoimport
    mongoimport --host your_remote_host --port your_remote_port --db your_database_name --collection your_collection_name --type csv --headerline --file your_csv_file.csv
  • 备份
    • mongodump 将数据导出到文件中。
    • mongorestore 从备份文件中恢复数据到 MongoDB 数据库。
  • 导出 mongoexport,将 MongoDB 数据导出到 JSON、CSV 或 TSV 文件中
  • 监控
    • mongostat,监控 MongoDB 实例的状态和性能指标。
    • mongotop,监控 MongoDB 实例中的读写操作。

❗️ 但是这些命令,需要在有mongo安装的服务器上。如果mongo安装到了docker里,这些命令需要进入docker操作。但但是❗️,这样又需要将csv导入到docker里。麻烦。所以现在直接进入脚本操作环节。