1 关于数据库
 如果项目是动态(内容会变化,网页后缀.jsp、.php、.shtml等)内容,则数据库是必不可少的一个环节。
2 MySQL的安装与初始化
2.1 Linux下的软件安装方式
2.1.1 源码包
优点:
- 开源,可以修改源代码;
- 编译安装,更加适合自己的系统,稳定高效。
缺点:
扩展:解包 常用语法:
#tar -zxvf *.tar.gz
#tar -jxvf *.tar.bz2
选项含义:
-z 或--gzip 或--ungzip :通过gzip指令处理文件;-x 或--extract 或--get :从压缩文件中还原文件;-v :显示操作过程;-f 或--file :指定一个文件;-j :支持bzip2解压文件。
实例:使用源码编译安装方式安装ncurses(一种常用的终端库) (1) 通过ssh服务先将软件包传递到服务器上“/usr/local/src ”  (2) 解压需要安装的源码包
#tar -zxvf ncurses.tar.gz
 (3) 切换到源码文件夹,然后执行后续操作
配置(config/configure/bootstrap )→编译(make/bootstrapd )→安装(make install/bootstrapd install ) 配置操作主要是指定软件的安装目录、需要的依赖在什么位置、指定不需要可选依赖、配置文件的路径、通用数据存储位置等。
- 指定安装的路径:
--prefix=路径 - 需要依赖的路径:
--with-PACKAGE名=包所在路径 - 不需要依赖:
--without-PACKAGE名
# cd ncurses-6.3
# ./configure --prefix=/usr/local/ncurses
 编译:
# make
安装:
# make install
编译和安装一起执行
#make && make install
2.1.2 二进制包(rpm)
优点:包管理系统简单,只需要几个命令就可以实现包的安装,省级,查询和卸载; 缺点:经过编译,不能再看到源代码
rpm相关命令:
#rpm -qa | grep 关键词 【查询包】
#rpm -qf 文件路径 【查询指定文件属于哪个包】
#rpm 选项 软件包完整名称
#rpm -e 软件包名 --nodeps 【当存在依赖关系时,可以忽略依赖关系,强制卸载】
-i :install,安装-v :显示进度条-h :表示以“#”形式显示进度条-e :卸载指定包名-U :升级软件,若未软件尚未安装,则安装软件-F :升级软件-V :对RPM包进行验证
实例:使用二进制包安装lynx (一款纯命令行的浏览器),在光盘中就有这个包 光盘的解挂和挂载参考博客:Linux自有服务(2)  安装:  例如查看百度:
#lynx --dump www.baidu.com
其中--dump 表示打印。 
2.1.3 yum
优点:安装简单,快捷 缺点:完全丧失了自定义性 注意:如果不更改软件来源,则需要联网才能使用yum 常用的yum命令:
#yum list 【列出当前已经安装的和可以安装的软件(全部)】
#yum search 关键词 【搜索指定的关键词的包】
#yum [-y] install 包名 【安装指定的包(-y表示允许不再确认)】
#yum [-y] update [包名] 【更新指定的包,不指定包则更新全部软件】
#yum [-y] remove 包名 【卸载指定的包】
2.2 安装MySQL
此处安装以yum安装为例:
#yum install mysql-server
2.2.1MySQL初始化
启动:
#systemctl start mysqld
查看默认端口号(3306):
#netstat -tnlp

MySQL初始化命令:
# mysql_secure_installation

2.2.2 MySQL的启动控制
语法:#systemctl start/stop/restart 进入MySQL的方式:#mysql -u 用户名 -p 退出MySQL的Linux命令行:mysql>exit
2.2.3 默认目录/文件位置
数据库存储目录:/var/lib/mysql 配置文件:/etc/my.cnf
3 MySQL的基本操作
3.1 库操作
以下命令在MySQL终端命令行中执行(大小写均可):
show databases; 【显示当前MySQL中全部的数据库】
create database 库名; 【创建数据库】
drop database 库名; 【删除数据库】
use 库名;
3.2 表操作
show tables;【显示当前数据库中所有的表名(必须先use数据库)】
create table 表名(
列名称1 数据类型[not null auto_increment],
列名称2 数据类型,
...,
primary key(主键)
);【在当前数据库下创建数据表】
desc 表名 【描述一个数据表(查看表结构)】
drop table [if exists] 表名 【删除一个数据表】
- 常见的数据类型:int(整型),char(定长字符),varchar(不定长字符)
- 主键不能重复
创建数据表(去test库中创建),要求:表名test_table,字段如下: id字段,11位整型,不为空,自增,主键 username字段,varchar类型,20长度 password字段。char类型,32长度 SQL(standard query language)语句:
create table testTable(
id int(11) not null auto_increment,
username varchar(20),
password char(32),
primary key(id)
);
 查看表结构:  删除数据表: 
3.3 记录/字段操作
3.3.1 增加记录
语法1:insert into 表名称 values (值1, 值2, ...);
语法2:insert into 表名称 (列1, 列2, ...) values (值1, 值2, ...);
实例:往数据表testTable表中新增一个记录username为zhangsan,password为123456。 SQL语句:
insert into testTable (username, password) values ('zhangsan', '123456');
3.3.2 查询记录
select 列名称1,列名称2,... from 表名称 where 条件;
select * from 表名称 where 条件;
实例:查询刚才新增的记录,且只查询用户名和密码,id = 1。
select username password from testTable where id = 1;

3.3.3 更新记录
语法:update 表名称 set 列名称1 = 值1,列名称2 = 值2, ... where 列名称 = 某值;
实例:使用更新语句更新id大于等于2的记录,将其密码改为:12345678。 SQL语句:
update testTable set password = '1234578' where id >= 2;

3.3.4 删除记录
delete from 表名称 where 列名称 = 值;
实例:删除id为2的记录
delete from testTable where id = 2;
 注:即使删除数据表中所有的记录,下一个插入的数据项的id仍为4(索引)。
3.3.5备份与还原
3.3.5.1 备份(导出)
全量备份(数据+结构):#mysqldump -uroot -p密码 -A > 备份文件路径 指定库备份(数据+结构):#mysqldump -uroot -p密码 库名 > 备份文件路径 多个库备份(数据+结构):#mysqldump -uroot -p密码 --databases db1 db2 > 备份文件路径 实例:备份整个库
#mysqldump -uroot -p密码 -A > /root/sql_20220430.sql
实例:每1分钟自动备份1次test数据库 (1) shell脚本 
(2) 编写计划任务
crontab -e
 
3.3.5.2 还原(导入)
还原命令分为:(1) mysql命令行source 方法;(2) 系统命令行方法。
- 还原全部数据库
(1) mysql命令行:mysql> source 备份文件路径 (2) 系统命令行:#mysql -uroot -p密码 < 备份文件路径 - 还原单个数据库(需指定数据库)
(1) mysql命令行
mysql> use 库名
mysql> source 备份文件路径
(2) 系统命令行:#mysql -uroot -p密码 库名 < 备份文件路径 3. 还原单个数据库的多个表(需指定数据库) (1) mysql命令行
mysql> use 库名
mysql> source 备份文件路径
(2) 系统命令行:#mysql -uroot -p密码 库名 < 备份文件路径 4. 还原多个数据库(一个备份文件里有多个数据库,此时不需要指定数据库) (1) mysql命令行:mysql> source 备份文件路径 (2) 系统命令行:#mysql -uroot -p密码 < 备份文件路径
实例:人为删除testTable表(模拟数据库丢失),然后通过最后一次备份还原数据表。 先删除数据表:  还原操作:  扩展:设置MySQL连接字符集
mysql> set names utf8;
注:需保证“三码一致”才能正常显示中文字符,“三码”是指:服务器端+传输过程+客户端。
4 扩展
4.1 MySQL的远程管理工具
分为两大类:B/S架构、C/S架构 B/S:B是指浏览器,S是指服务器。例如百度搜索应用就属于BS架构软件。 C/S:C是指客户端,S是指服务器。例如:QQ、电脑端微信等应用程序都是C/S架构。
在B/S中,MySQL有个典型的管理工具:PMA(PHPmyadmin); C/S中比较典型的软件:Navicat、MySQL workbranch。
在连接之前,需打开防火墙或在指定区域打开端口(记得重启防火墙):
#firewall-cmd --zone=public --remove-port=3306/tcp --permanent
#firewall-cmd --reload

然后,需要允许MySQL远程登录,否则:  (1) 先进入数据库选择mysql 数据库; (2) 执行SQL语句:select host, user from user;  (3) 将其中的一个记录的host 值改为“% ”,表示可以允许任何地方登录。  (4) 刷新权限表或重启MySQL 刷新权限:mysql> flush privileges; (5) 登录成功 
|