linux-----数据库
- Linux下数据库概述
- 数据库类型:
- 关系型数据库(RDBMS):如MySQL、PostgreSQL、Oracle等。这些数据库以表格的形式存储数据,表格之间通过关系(如主键 - 外键关系)相互关联。关系型数据库支持复杂的查询操作,使用SQL(结构化查询语言)进行数据操作和管理。
- 非关系型数据库(NoSQL):包括键 - 值存储(如Redis)、文档型数据库(如MongoDB)、列存储数据库(如Cassandra)等。它们不依赖于传统的表格关系模型,适用于处理大规模、高并发、灵活的数据存储需求。
- 数据库类型:
- MySQL数据库在Linux中的应用
- 安装与配置:
- 在Linux系统中,可以通过包管理工具(如apt - get for Debian/Ubuntu或yum for RHEL/CentOS)安装MySQL。例如,在Ubuntu上可以使用
sudo apt - get install mysql - server
进行安装。安装完成后,需要进行一些基本的配置,如设置root用户密码、配置字符集等。
- 在Linux系统中,可以通过包管理工具(如apt - get for Debian/Ubuntu或yum for RHEL/CentOS)安装MySQL。例如,在Ubuntu上可以使用
- 基本操作:
- 启动和停止服务:使用
systemctl
命令可以启动、停止和重启MySQL服务。例如,sudo systemctl start mysql
启动服务,sudo systemctl stop mysql
停止服务。 - 连接数据库:通过
mysql - u root - p
命令可以以root用户身份连接到MySQL数据库,其中- u
指定用户名,- p
表示需要输入密码。 - 数据库操作:
- 创建数据库:在MySQL命令行中,使用
CREATE DATABASE database_name;
语句创建一个新的数据库,例如CREATE DATABASE mytestdb;
。 - 选择数据库:使用
USE database_name;
语句选择要操作的数据库,如USE mytestdb;
。 - 创建表:使用
CREATE TABLE
语句创建表。例如,CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), age INT);
创建了一个名为users
的表,包含id
(自增主键)、name
和age
三个列。 - 插入数据:通过
INSERT INTO
语句插入数据,如INSERT INTO users (name, age) VALUES ('John', 30);
将一条记录插入到users
表中。 - 查询数据:使用
SELECT
语句进行查询。例如,SELECT * FROM users;
查询users
表中的所有记录,SELECT name, age FROM users WHERE age > 25;
查询年龄大于25岁的用户的姓名和年龄。 - 更新数据:使用
UPDATE
语句更新数据,如UPDATE users SET age = 31 WHERE name = 'John';
将John
的年龄更新为31岁。 - 删除数据:使用
DELETE FROM
语句删除数据,如DELETE FROM users WHERE age < 20;
删除年龄小于20岁的用户记录。
- 创建数据库:在MySQL命令行中,使用
- 启动和停止服务:使用
-
PostgreSQL数据库在Linux中的应用
- 安装与配置:
- 在Linux上安装PostgreSQL,例如在Debian/Ubuntu系统中,可以使用
sudo apt - get install postgresql postgresql - contrib
进行安装。安装后,默认会创建一个名为postgres
的用户,需要为该用户设置密码,并可以创建其他用户和数据库进行管理。
- 在Linux上安装PostgreSQL,例如在Debian/Ubuntu系统中,可以使用
- 基本操作:
- 启动和停止服务:在Debian/Ubuntu系统中,可以使用
sudo service postgresql start
启动服务,sudo service postgresql stop
停止服务。 - 连接数据库:使用
psql - U postgres
命令以postgres
用户身份连接到数据库,- U
指定用户名。进入命令行后,可以执行SQL操作。 - 数据库操作:
- 创建数据库:在
psql
命令行中,使用CREATE DATABASE database_name;
语句创建数据库,如CREATE DATABASE mypgdb;
。 - 选择数据库:使用
\c database_name
命令选择要操作的数据库,如\c mypgdb
。 - 创建表和操作数据:与MySQL类似,使用
CREATE TABLE
语句创建表,如CREATE TABLE employees (id SERIAL PRIMARY KEY, name VARCHAR(100), department VARCHAR(50));
。插入数据使用INSERT INTO
语句,查询使用SELECT
语句,更新使用UPDATE
语句,删除使用DELETE FROM
语句。
- 创建数据库:在
- 启动和停止服务:在Debian/Ubuntu系统中,可以使用
- 安装与配置:
-
非关系型数据库在Linux中的应用(以Redis为例)
- 安装与配置:
- 在Linux上安装Redis,例如在Ubuntu上可以使用
sudo apt - get install redis - server
进行安装。安装后,可以通过修改配置文件(通常是/etc/redis/redis.conf
)来配置Redis的参数,如监听的IP地址、端口号、持久化方式等。
- 在Linux上安装Redis,例如在Ubuntu上可以使用
- 基本操作:
- 启动和停止服务:使用
sudo systemctl start redis
启动Redis服务,sudo systemctl stop redis
停止服务。 - 连接Redis:使用
redis - cli
命令连接到Redis服务器。进入命令行后,可以执行Redis命令。 - 数据操作:
- 键 - 值存储:Redis最基本的操作是存储键 - 值对。例如,
SET key value
命令将一个键值对存储到Redis中,如SET mykey 'Hello, Redis!'
。使用GET key
命令获取键对应的值,如GET mykey
会返回Hello, Redis!
。 - 列表操作:Redis支持列表数据结构。可以使用
LPUSH
命令将一个或多个值插入到列表头部,如LPUSH mylist 'value1' 'value2'
。使用LRANGE
命令获取列表中的元素范围,如LRANGE mylist 0 - 1
返回列表中的所有元素。 - 集合操作:对于集合数据结构,使用
SADD
命令添加元素,如SADD myset 'element1' 'element2'
。使用SMEMBERS
命令获取集合中的所有元素,如SMEMBERS myset
返回集合中的元素列表。 - 哈希操作:哈希数据结构用于存储对象。例如,
HSET myhash field1 value1
将一个哈希字段和值存储到myhash
中。使用HGETALL myhash
获取哈希中的所有字段和值。
- 键 - 值存储:Redis最基本的操作是存储键 - 值对。例如,
- 启动和停止服务:使用
- 安装与配置:
-
安装前准备
- 系统更新:在安装MySQL之前,建议先更新系统软件包,以确保系统的软件包管理工具是最新的,并且系统已经安装了必要的依赖项。在基于Debian/Ubuntu的系统中,可以使用
sudo apt - get update
命令进行更新;在基于RHEL/CentOS的系统中,可以使用sudo yum update
命令。 - 检查系统资源:确保系统有足够的磁盘空间、内存等资源来运行MySQL。MySQL的资源需求取决于使用场景,如数据库的大小、并发连接数等。一般来说,至少需要几百MB的磁盘空间用于安装,并且根据数据库的规模和负载情况,可能需要数GB甚至更多的空间。同时,要有足够的内存来支持数据库的运行,特别是在处理大量并发连接时。
- 系统更新:在安装MySQL之前,建议先更新系统软件包,以确保系统的软件包管理工具是最新的,并且系统已经安装了必要的依赖项。在基于Debian/Ubuntu的系统中,可以使用
-
安装MySQL
- Debian/Ubuntu系统安装:
- 使用以下命令安装MySQL服务器:
sudo apt - get install mysql - server
。在安装过程中,系统会提示输入root
用户(MySQL的超级管理员账户)的密码。 - 安装完成后,MySQL服务会自动启动。可以使用
systemctl
命令检查服务状态,例如sudo systemctl status mysql
,如果服务正在运行,会显示绿色的active (running)
状态信息。
- 使用以下命令安装MySQL服务器:
- RHEL/CentOS系统安装:
- 首先,添加MySQL的Yum仓库。对于MySQL官方仓库,可以下载并安装相应的RPM包来配置仓库。例如,对于MySQL 8.0,在RHEL 8/CentOS 8上可以使用以下命令:
- Debian/Ubuntu系统安装:
sudo yum localinstall https://dev.mysql.com/get/mysql80 - community - release - el8 - 3.noarch.rpm
- 然后,使用Yum安装MySQL服务器:`sudo yum install mysql - server`。安装完成后,使用`systemctl`命令启动MySQL服务:`sudo systemctl start mysqld`。
- 其他安装方式:
- 还可以从MySQL官方网站下载二进制安装包进行安装。这种方式相对复杂一些,需要手动解压安装包、配置环境变量等步骤。例如,对于MySQL 8.0,下载二进制包后,解压到合适的目录(如
/usr/local/mysql
),然后在终端中进入该目录,执行以下命令进行初始化:
- 还可以从MySQL官方网站下载二进制安装包进行安装。这种方式相对复杂一些,需要手动解压安装包、配置环境变量等步骤。例如,对于MySQL 8.0,下载二进制包后,解压到合适的目录(如
sudo bin/mysqld --initialize --user = mysql
- 之后可以通过`sudo bin/mysqld_safe --user = mysql &`命令启动MySQL服务,并且需要将MySQL的`bin`目录添加到系统的`PATH`环境变量中,以便方便地使用MySQL命令行工具。
- 配置MySQL
- 安全配置脚本(重要):
- 在安装完成后,建议运行MySQL提供的安全配置脚本。在Debian/Ubuntu和RHEL/CentOS系统中,都可以使用
sudo mysql_secure_installation
命令来运行这个脚本。 - 脚本会提示进行一系列的安全设置,包括修改
root
密码(如果在安装过程中没有设置强密码)、删除匿名用户、禁止root
远程登录(默认情况下,root
只能从本地登录,这是一种安全措施)、删除测试数据库等操作。按照提示逐步操作,可以增强MySQL数据库的安全性。
- 在安装完成后,建议运行MySQL提供的安全配置脚本。在Debian/Ubuntu和RHEL/CentOS系统中,都可以使用
- 配置文件修改:
- MySQL的主要配置文件在不同的系统中位置可能不同。在Debian/Ubuntu系统中,配置文件通常是
/etc/mysql/mysql.conf.d/mysqld.cnf
;在RHEL/CentOS系统中,主要配置文件是/etc/my.cnf
。 - 可以通过修改配置文件来调整MySQL的各种参数,如服务器的监听端口(默认是3306)、字符集、存储引擎、缓存大小等。例如,要修改MySQL服务器的监听端口,可以在配置文件中找到
[mysqld]
部分,添加或修改port = [新端口号]
这一行。修改完成后,需要重启MySQL服务使配置生效。在Debian/Ubuntu系统中,可以使用sudo systemctl restart mysql
命令;在RHEL/CentOS系统中,可以使用sudo systemctl restart mysqld
命令。
- MySQL的主要配置文件在不同的系统中位置可能不同。在Debian/Ubuntu系统中,配置文件通常是
- 字符集配置:
- 为了正确存储和处理各种语言的字符,需要配置MySQL的字符集。在配置文件中,找到
[mysqld]
部分,添加或修改character - set - server = utf8mb4
(推荐使用utf8mb4字符集,它支持更广泛的Unicode字符)。同时,在[client]
部分,可以添加default - character - set = utf8mb4
,以确保客户端也使用相同的字符集进行通信。配置完成后重启服务。
- 为了正确存储和处理各种语言的字符,需要配置MySQL的字符集。在配置文件中,找到
- 用户权限配置:
- 除了
root
用户外,通常需要创建其他具有不同权限的用户来管理和访问数据库。可以使用mysql
命令行工具登录到MySQL(例如,mysql - u root - p
,然后输入root
密码),进入MySQL命令行界面后,使用以下命令创建用户:
- 除了
- 安全配置脚本(重要):
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password';
- 这会创建一个名为`new_user`的用户,只能从本地(`localhost`)登录,密码是`password`。然后,可以使用`GRANT`语句为用户授予不同的权限,例如:
GRANT ALL PRIVILEGES ON *.* TO 'new_user'@'localhost';
- 这会授予`new_user`在所有数据库(`*.*`)上的所有权限(`ALL PRIVILEGES`)。权限可以根据实际需求进行更精细的设置,如只允许用户对特定数据库或表进行查询、插入、更新等操作。授予权限后,使用`FLUSH PRIVILEGES;`命令使权限设置生效。
- 连接到MySQL数据库
- 使用命令行客户端:
- 在Linux终端中,输入
mysql -u [用户名] -p
,其中[用户名]
是你要登录的MySQL用户账号。例如,以root
用户登录,则输入mysql -u root -p
。然后按回车键,系统会提示你输入密码,输入正确密码后即可进入MySQL命令行界面。
- 在Linux终端中,输入
- 通过编程语言连接(以Python为例):
- 首先需要安装Python的MySQL驱动程序,如
mysql - connector - python
。安装完成后,可以使用以下代码连接到MySQL数据库:
- 首先需要安装Python的MySQL驱动程序,如
- 使用命令行客户端:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="your_user",
password="your_password",
database="your_database"
)
print(mydb)
- 上述代码中,`host`指定了MySQL服务器的地址(`localhost`表示本地服务器),`user`和`password`分别是登录的用户名和密码,`database`是要连接的数据库名称。如果连接成功,`mydb`对象将包含数据库连接信息。
- 数据库操作
- 创建数据库:
- 在MySQL命令行中,使用
CREATE DATABASE [数据库名称];
语句来创建新的数据库。例如,CREATE DATABASE my_test_database;
将创建一个名为my_test_database
的数据库。 - 在编程语言中(以Python为例),可以在连接成功后使用如下代码创建数据库:
- 在MySQL命令行中,使用
- 创建数据库:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="your_password"
)
mycursor = mydb.cursor()
mycursor.execute("CREATE DATABASE my_test_database")
-
选择数据库:
- 在MySQL命令行中,使用
USE [数据库名称];
语句来选择要操作的数据库。例如,USE my_test_database;
选择刚刚创建的my_test_database
。 - 在编程语言中,通常在连接数据库时就可以指定要使用的数据库,如前面Python示例中的
database
参数。如果需要在程序中切换数据库,可以使用类似命令行的方式(具体取决于所使用的编程语言和数据库驱动)。
- 在MySQL命令行中,使用
-
创建表:
- 在MySQL命令行中,使用
CREATE TABLE
语句来创建表。例如,创建一个名为customers
的表,包含id
、name
和email
三个列的语句如下:
- 在MySQL命令行中,使用
CREATE TABLE customers (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
email VARCHAR(255)
);
- 在编程语言中,以Python为例,代码如下:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="your_password",
database="my_test_database"
)
mycursor = mydb.cursor()
mycursor.execute("""
CREATE TABLE customers (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
email VARCHAR(255)
)
""")
- 插入数据:
- 在MySQL命令行中,使用
INSERT INTO
语句插入数据。例如,向customers
表中插入一条记录:
- 在MySQL命令行中,使用
INSERT INTO customers (name, email) VALUES ('John Doe', 'john.doe@example.com');
- 在编程语言中,以Python为例,代码如下:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="your_password",
database="my_test_database"
)
mycursor = mydb.cursor()
sql = "INSERT INTO customers (name, email) VALUES (%s, %s)"
val = ("John Doe", "john.doe@example.com")
mycursor.execute(sql, val)
mydb.commit()
- 注意,在编程语言中插入数据后,通常需要使用`mydb.commit()`来提交事务,确保数据真正插入到数据库中。
- 查询数据:
- 在MySQL命令行中,使用
SELECT
语句查询数据。例如,查询customers
表中的所有记录:SELECT * FROM customers;
。可以添加WHERE
子句来进行条件查询,如SELECT * FROM customers WHERE name = 'John Doe';
。 - 在编程语言中,以Python为例,代码如下:
- 在MySQL命令行中,使用
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="your_password",
database="my_test_database"
)
mycursor = mydb.cursor()
mycursor.execute("SELECT * FROM customers")
result = mycursor.fetchall()
for row in result:
print(row)
- 更新数据:
- 在MySQL命令行中,使用
UPDATE
语句更新数据。例如,更新customers
表中John Doe
的电子邮件地址:
- 在MySQL命令行中,使用
UPDATE customers SET email = 'new.email@example.com' WHERE name = 'John Doe';
- 在编程语言中,以Python为例,代码如下:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="your_password",
database="my_test_database"
)
mycursor = mydb.cursor()
sql = "UPDATE customers SET email = %s WHERE name = %s"
val = ("new.email@example.com", "John Doe")
mycursor.execute(sql, val)
mydb.commit()
- 删除数据:
- 在MySQL命令行中,使用
DELETE FROM
语句删除数据。例如,删除customers
表中name
为John Doe
的记录:DELETE FROM customers WHERE name = 'John Doe';
。 - 在编程语言中,以Python为例,代码如下:
- 在MySQL命令行中,使用
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="your_password",
database="my_test_database"
)
mycursor = mydb.cursor()
sql = "DELETE FROM customers WHERE name = %s"
val = ("John Doe",)
mycursor.execute(sql, val)
mydb.commit()
- 备份和恢复数据库
- 备份数据库:
- 使用
mysqldump
命令备份数据库。例如,备份my_test_database
数据库到一个SQL文件中,可以在终端中输入以下命令:
- 使用
- 备份数据库:
mysqldump -u [用户名] -p my_test_database > backup.sql
- 系统会提示你输入密码,输入正确密码后,`my_test_database`数据库的结构和数据将被备份到`backup.sql`文件中。
- 恢复数据库:
- 如果需要恢复数据库,可以使用以下命令:
mysql -u [用户名] -p my_test_database < backup.sql
- 同样,输入密码后,`backup.sql`文件中的数据和结构将被恢复到`my_test_database`中。在恢复之前,需要确保目标数据库已经存在(可以先创建一个空的数据库)。