导出数据库
如果 MySQL 可以导入数据库,那么它也可以将数据库导出到 SQL 文件。
为此,无需在 MySQL 控制台中,我们运行以下命令:
$ sudo mysqldump -u username -p database_to_export > file.sql
我们可以使用 ls 命令检查结果:
运行该命令时,系统将提示我们输入 MySQL 根用户密码。
另外,请记住,此命令必须由系统的 root 用户运行或者使用 sudo。
最后,可以选择输出文件的路径。
授予所有权限
新创建的用户对任何数据库都没有任何权限。
事实上,我们也无法访问 MySQL shell。
然后,root 用户必须向这个新用户授予某些权限。
有多种权限,它们的分配取决于服务器管理员。
他们之中有一些是:
- ALL PRIVILEGES:分配所选数据库的所有权限。
- CREATE:此权限允许我们创建新表或者数据库。
- DROP:在这种情况下,它允许我们删除表和数据库。
- DELETE:它允许从表中删除记录。
- INSERT:使用此权限,我们可以在表中创建记录。
- SELECT:从表中读取记录需要此权限。
- UPDATE:它允许我们更新表的记录。
- 授予选项:使用此权限,用户可以删除某些用户的权限。
授予权限的语法如下:
> GRANT [privilege1, privilege2] ON [database].[table] TO '[user]'@'localhost';
例如:
> GRANT CREATE ON test.* TO 'user'@'localhost';
在这种情况下,用户只能在名为 test 的数据库中创建表。
相反,如果我们想在一次对测试数据库的调用中授予对所有表的所有权限,最好的选择是 ALL PRIVILEGES。
这是一个例子:
> GRANT ALL PRIVILEGES ON test.* TO 'user'@'localhost';
通过这种方式,在 MySQL 中为用户分配了权限。
MySQL配置文件(my.cnf)在哪里?
MySQL 作为系统服务运行。
在 Unix 系列系统中,服务是通过文本文件配置的。
my.cnf 文件是定义所有 MySQL 配置的文件。
如果使用 Ubuntu,可以在以下路径找到 MySQL 配置文件:
/etc/mysql/my.cnf
另一方面,如果我们使用 CentOS,则路径如下:
/etc/my.cnf
要记住的一件事是配置文件可能包含其他配置文件。
这是为了分离配置并使它们更易于理解。
如果要查看其内容,可以使用 cat 命令:
$ cat /etc/mysql/my.cnf
我们可以使用文本编辑器(例如 nano 或者 vim )编辑其内容。
在 Ubuntu 的情况下,大部分配置都在
/etc/mysql/conf.d/
请记住,如果我们要编辑它,请先创建文件的备份。
备份数据库
MySQL 有一个名为 mysqldump 的工具,它允许我们备份 MySQL 实例中的数据库。
这是一个非常有用和敏捷的工具。
进行备份类似于我们之前看到的导出数据库。
但是,也可以使用此工具备份所有现有数据库。
对于它,以 root 用户或者使用 sudo 运行以下命令就足够了:
$ sudo mysqldump -u root -p --all-databases > alldatabases.sql
列出所有 MySQL 数据库
随着时间的推移,我们的 MySQL 实例将充满许多数据库。
然后,最好在某个时候将它们全部列出。
为此,请以 root 用户身份或者使用 sudo 使用以下命令访问 MySQL 控制台:
$ sudo mysql -u root -p
一旦我们进入 MySQL 控制台,只需使用以下命令列出所有现有数据库:
> SHOW DATABASES;
在屏幕输出中,我们可以看到所有的数据库。
重启 MySQL
如果我们对 MySQL 设置进行了任何更改,它们将不会生效,直到我们重新启动 MySQL 或者重新启动 MySQL 服务。
要重新启动 MySQL,只需使用以下命令:
$ sudo systemctl restart mysql
对于 CentOS,使用这个作为 root 用户:
$ systemctl restart mysqld
如果该命令没有生成任何屏幕输出,则表示服务已成功重新启动。
导入 SQL 文件
MySQL 允许我们以 SQL 格式导入数据库备份。
如果我们想将数据库移动到新服务器,这是一个很大的优势。
第一个要求是创建一个将导入 SQL 文件的数据库。
> CREATE DATABASE example2;
然后,我们可以使用以下命令退出控制台:
> exit;
之后,我们可以以 root 用户身份使用以下命令开始导入文件:
$ sudo mysql -u username -p [database] < [sql_file_path]
注意需要写出SQL文件所在的完整路径。
在我们的例子中,文件“file.sql”位于主文件夹中。
创建一个 MySQL 表
创建新 MySQL 实例时最基本的操作之一是创建表。
但是,要创建表,我们必须创建一个数据库。
进入 MySQL 控制台后,我们使用以下命令创建数据库:
> CREATE DATABASE [database_name];
然后,我们需要选择新创建的数据库。
> USE [database_name];
在这种情况下,我将创建一个名为“Example”的数据库。
现在我们可以创建表了。
创建表的基本 MySQL 语法如下:
> CREATE TABLE [table_name] (column1_name data_type(length) [NOT NULL] [DEFAULT value] [AUTO_INCREMENT], column2_name data_type(length) [NOT NULL] [DEFAULT value] [AUTO_INCREMENT] ... );
在以下示例中,我将创建一个名为“Person”的表,其中包含三列。
第一个是“Id”,它是长度为 10 的整数类型,不能为空。
通常,第一列是专用于主键的列。
此外,[] 中的选项是可选的。
第二列是“name”,它是长度为 10 的 varchar,最后一列是“last_name”,它也是长度为 10 的 varchar。
> CREATE TABLE Person (Id int(10) NOT NULL, name varchar(10), last_name varchar(10));
惊人的!我们刚刚创建了一个 MySQL 表。
但是这个表是空的,因为它刚刚创建,还没有插入数据。
现在让我们看看如何将数据插入到该表中。
为 MySQL 设置 root 密码
MySQL root 用户是拥有所有数据库的所有权限的用户。
所以必须为这个用户定义一个非常强的密码。
root 用户可以做的一些操作:
- 创建新用户。
- 管理用户的权限。
为此,我们将使用 mysql_secure_installation 脚本,在这里我们不仅可以定义 root 用户的密码,还可以添加其他配置。
因此,在 Ubuntu 中,运行以下命令以使用 mysql_secure_installation 脚本。
$ sudo mysql_secure_installation
在 CentOS 上,命令相同,但以 root 用户身份运行。
$ mysql_secure_installation
第一个问题是关于激活验证密码插件。
启用它是个好主意。
然后,选择密码验证策略的级别。
接下来,我们可以设置root用户密码:
之后,插件将评估密码的强度。
输入 Y 继续。
然后,它会询问我们必须回答的其他配置问题。
答案取决于每个特定案例。
恭喜!已正确定义 root 密码。
CRUD 操作
对数据库表的 CRUD 操作是其他非常基本的数据操作操作。
所以,我们需要学习如何去做。
CRUD 代表:
C : 创建一个表。
R:从数据库中读取数据。
U : 更新数据库。
D:从数据库中删除数据。
创建新记录(插入)
创建表后,就可以向其中插入记录了。
为此,有必要知道表的列是哪种类型。
对于这个例子,我们将使用我们之前创建的同一个表。
使用插入语句创建记录的基本语法如下:
> INSERT INTO table_name (column1, column2, column3,..) VALUES ( value1, value2, value3,..);
所以,它会是这样的:
> INSERT INTO Person (Id, name, last_name) VALUES (1,'jack','Winters');
从表中读取数据(选择)
一旦数据被保存,就该读取它了。
语句是 select 。
基本语法如下:
> SELECT column1, column2, ... FROM table_name;
如果要读取表中的所有数据,请使用以下一项:
> SELECT * FROM table_name;
但是,通常需要设置一个条件来读取我们需要的数据。
我们可能拥有数百万或者数十亿条记录,强烈建议不要一次返回所有这些数据。
为此,请将 Where 子句与条件一起添加。
> SELECT * FROM table_name WHERE [condition]
例如,如果我想读取 id 为 1 的所有字段,我将使用以下语句:
> SELECT * FROM Person WHERE Id=1;
更新数据
我们可能插入了不正确的数据,因此我们需要更新它。
为此,我们需要使用 Update 语句。
首先,你需要知道哪些记录需要更新;有必要补充一个小条件。
否则,它将更新所有记录。
所以你需要小心。
基本语法如下:
> UPDATE table_name SET column1 = value1, column2 = value2 WHERE [condition];
继续前面的例子,如果要更新Id为“1”的数据的“last_name”列,可以通过以下方式进行:
> UPDATE Person SET last_name = 'Clark' WHERE Id=1;
现在,再次运行 select 语句以查看更改:
> SELECT * FROM Person;
删除一条记录
如果要删除记录,可以使用 delete 语句。
此外,我们必须使用条件来知道要删除哪条记录。
删除命令的基本语法如下:
> DELETE FROM table_name WHERE condition;
例如,如果要删除 Id 值为 1 的记录,则语句如下:
> DELETE from Person WHERE Id=1;
检查 MySQL 版本
MySQL 是一个开发相当活跃的应用程序。
除此之外,大型 Linux 发行版不断发送安全补丁。
所以最好知道安装了哪个版本的 MySQL。
另一方面,在互联网上,他们经常发布有关发现的安全漏洞以及受影响的版本的出版物。
通过了解我们拥有哪个版本,我们将能够知道我们是否有任何漏洞并采取预防措施。
为此,只需运行以下命令:
$ mysql --version
在那里我们可以看到安装的当前版本,以便我们可以根据我们的需要对其进行更新或者保留。
启动 MySQL 并在启动时启用
现在 MySQL 已安装但仍未运行。
那么如何启动MySQL呢?
从以前的 Linux 版本开始,systemd 负责管理系统服务。
我们可能已经知道,MySQL 是一个系统服务。
要开始运行 MySQL 服务,请在终端中键入以下命令:
$ sudo systemctl start mysql
如果我们使用 CentOS,请以 root 用户身份使用此命令:
$ systemctl start mysqld
正如我们所见,没有输出。
这意味着服务启动成功。
如果我们重新启动系统,我们会注意到 MySQL 没有运行。
所以我们需要让它在系统启动时运行。
为此,请使用 systemctl 命令但添加启用选项:
$ sudo systemctl enable mysql
如果我们使用的是 CentOS:
$ systemctl enable mysqld
现在,如果我们重新启动系统,我们会注意到 MySQL 正在运行。
让我们看看如何确保这一点。
在 MySQL 上创建用户
使用 MySQL 是一件微妙的事情,不是因为服务本身的复杂性,而是因为安全策略,我们必须实施以保护数据。
基本安全策略是为每个应用程序或者数据库创建特定用户。
为此,我们必须首先以 root 用户身份访问 MySQL shell:
$ sudo mysql -u root -p
在 CentOS 上:
$ mysql -u root -p
运行该命令时,系统会要求我们输入 MySQL 根用户密码。
然后,我们将能够使用 MySQL 命令。
要创建新用户,请运行以下语句:
> CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
用我们选择的用户名替换“用户”。
“localhost”是我们将其中创建用户的主机。
在“密码”中输入这个新用户的密码。
同样,建议使用强密码。
Linux 上的 MySQL 日志在哪里?
日志文件是与特定程序或者系统服务相关的所有事件的顺序记录。
不时地检查它们以寻找程序执行中的任何异常行为是非常重要的。
另外,当MySQL服务失败或者无法启动时,错误会直接记录在日志中。
在 Ubuntu 上,MySQL 日志保存在
/var/log/mysql/error.log
.
在 CentOS 的情况下,该文件位于
/var/log/mysqld.log
要查看文件的内容,可以使用 tail 命令。
例如:
$ tail /var/log/mysql/error.log
或者,如果我们使用 CentOS:
$ tail /var/log/mysqld.log
通过运行它,我们将能够看到服务发生的一切。
此外,我们可以在 tail 命令中使用 -f 选项来持续查看日志记录的最新更新。
$ tail -f /var/log/mysqld.log
在 Linux Ubuntu 和 CentOS 上安装 MySQL
在 Linux 上使用 MySQL 的第一步显然是在我们的系统中安装它。
Ubuntu 和 CentOS 是两个最常用的 Linux 发行版。
就 Ubuntu 而言,它在来自其他操作系统(如 Windows)的新手中很受欢迎。
最近,Ubuntu 开发背后的 Canonical 一直在分析 Ubuntu 以用于服务器。
另一方面,CentOS 作为 Red Hat Enterprise Linux 的克隆而诞生,一直以服务器领域为主要目标。
因此,如果我们使用 Ubuntu,则可以通过在终端会话中键入以下命令来安装 MySQL:
$ sudo apt install mysql-server
然后,在输入用户密码后,它将开始下载和后续安装。
另一方面,CentOS 默认情况下在其存储库中不包含 MySQL。
但是,添加 MySQL 存储库来安装它很容易。
首先,切换到root用户,然后添加存储库。
$ su $ yum install https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm
键入 Y 以启动该过程。
现在,我们可以在 CentOS 上安装 MySQL。
只需键入以下命令:
$ yum install mysql-community-server
MySQL 在 Linux 上安装在哪里?
通常,每个 Linux 发行版都有其解压缩我们安装的每个程序的方法。
但是,Linux 有一些约定。
通常,MySQL 二进制文件位于以下位置:
/usr/bin
另一方面,最好知道数据库在系统中的存储位置。
通常位置如下:
/var/lib/mysql/
最后,如果我们想知道所有已安装的 MySQL 文件所在的位置,可以运行以下命令:
对于 Ubuntu:
$ dpkg -L mysql-server
卸载 MySQL
如果我们想从 Linux 卸载 MySQL,只需调用每个发行版的包管理器。
对于 Ubuntu,我们使用 APT 包管理器。
要卸载它,以下命令就足够了:
$ sudo apt remove mysql
在 CentOS 上,包管理器是 YUM,所以以 root 用户身份,执行以下命令:
$ yum remove mysql-community-server
检查 MySQL 正在运行的端口
管理 MySQL 服务的一个重要部分是了解实例在哪个端口上运行。
默认情况下,MySQL 使用的端口是 3306.
但是,始终建议在开始工作之前进行检查。
要检查 Linux 上 MySQL 使用的端口,我们可以使用以下两个命令之一:
$ lsof -n | grep 'mysql.*TCP'
或者,我们也可以使用这个:
$ netstat -tlpn | grep mysql
无论如何,如果我们使用像 iptables 或者 CSF 防火墙这样的防火墙,知道 MySQL 使用哪个端口以便打开该端口非常有用。
使 MySQL 不区分大小写
在开发独立应用程序时,表的名称通常是一个问题。
默认情况下,MySQL 在表名中区分大小写。
因此,在某些情况下,我们需要恢复此行为。
要进行此更改,需要在 MySQL 配置文件中添加指令。
首先,停止MySQL服务。
$ sudo systemctl stop mysql
如果我们使用 CentOS,命令如下:
$ systemctl stop mysqld
在此之后,编辑以下特定配置文件。
所以用root用户权限打开它:
在 Ubuntu 上:
$ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
如果我们使用 CentOS,路径会有所不同。
路径将是
/etc/my.cnf
然后,在 [mysqld] 部分下添加以下指令:
lower_case_table_names = 1
然后保存更改并关闭文件。
接下来,我们需要再次启动 MySQL 服务。
$ sudo systemctl start mysql
或者在 CentOS 上:
$ systemctl start mysqld
MySQL 是世界上最流行的关系数据库引擎之一。
检查 MySQL 是否正在运行
我们可以使用 systemctl 命令检查 MySQL 是否正在运行,但添加 status 选项:
$ sudo systemctl status mysql
对于 CentOS,该命令应以 root 用户身份运行,如下所示:
$ systemctl status mysqld
该命令生成带有绿色信号的屏幕输出,指示服务正在运行。
否则,它显示为灰色,表示它处于非活动状态或者已停止。
检查是否安装了 MySQL
在两个系统上的安装过程中可能出现问题。
因此,检查是否安装了 MySQL 是一个好主意。
在两个系统(Ubuntu 和 CentOS)上,如果你想检查 MySQL 是否安装正确,你可以使用以下命令显示版本:
$ mysql --version