MySQL数据库
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) 登录成功