学习数据库知识

一、思路和学习方法

  本文学习于:B站平台UP主 IT 小当家,学习 MySQL 数据库,里面仅仅用于自己学习,进行复现,并加以自己的一些学习过程和理解,如果有侵权会删除。因为 Oracle 容量好大,我也是在虚拟机里面学习,担心内存空间到时候不太够,等以后换一台电脑再学习。学习Oracle以后也可以参考之前学习的UP主 C语言技术网(www.freecplus.net),在 b 站学习于 C 语言技术网。以后再继续学习Oracle部分,现在先学习 MySQL。
网址如下:http://www.freecplus.net/81c9c27c78764042af7aff5b532df9a2.html。
  注意:我是用的 mysql 数据库版本为

二、数据库知识

2.1 介绍MySQL和安装

  MySQL是一个开放源码的小型关联式数据库管理系统,其特点是体积小,速度快,成本低,一般为了降低成本选择 MySQL,现在已被 Oracle 收购了。  之前在搭建项目运行环境时安装过一次,还有一些需要更新的通过下面语句,也是MySQL 安装语句为,

yum install -y mysql-server mysql-devel mysql

安装结果如下,

关于忘记了MySQL密码,参考这个链接:
https://www.cnblogs.com/black-fact/p/11613361.html
启动和关闭方式为,

service mysqld start
mysql -u root  // 进入 mysqlmysql>quit  //  退出 sql
mysql>show databases;  //  查阅默认数据库

  其结果如下,

  这样就安装好了,接下来正式学习。

2.2 MySQL日常操作命令

  MySQL的常用命令,这里是创建数据库方式

create database my_db;  // 创建名为 name_database 的数据库
use my_db; // 进入 name_database 数据库
show tables; // 查看数据库里有多少张表

  创建表命令,

// 创建名为 tb1 的表,并创建两个字段,id,name,数据长度
create table tb1(id varchar(20), name varchar(20));// 查看创建的表属性情况
show create table tb1;

其结果如下,

  对表接着进行操作

show tables;  // 显示创建的表
desc tb1;  // 显示表的字段,用表格显示,比较清晰

  在表中插入数据和查看数据相关操作,

// 在创建的表 tb1 中写入数据,id = '0001',name = 'wangzijinvv'
insert into tb1 values ('0001', 'wangzijinvv');

其中结果如下,

  查看表中内容,

// 查看表 tb1 中所有的数据
select * from tb1;  // 查看某个 id 的数据
select * from tb1 where id='0001';// 查看某个 name 的数据
select * from tb1 where name='wangzijinvv';// 查看某个 id 和 name 的数据
select * from tb1 where id='0001' and name='wangzijinvv';// 匹配某几个字符的数据, 并打印相应的行数,在 limit 后面,或者没有 limit 全部打印
select * from tb1 where name like "%wangzi%" limit 1;

其结果如下,

  其中在数据库密码权限这里,我好像通过上面步骤没有设置成功,所以关于密码和权限的都没有成功,先学习基本知识吧,后面如果特别需要再修改。不知道为什么我的 mysql 不能用,后来找到原因了是 mysql 8.0 以后修改权限方式不一样,下面部分是 8.0 之前的语句,记录作备份以后可能用到吧, 对数据库进行授权,

// 通过这样方式可以查看帮助手册
help grant
help show grants// 让数据库 my_db 可以通过 用户名:'localhost',密码:'123' 访问
grant all on my_db.* to 'zijin'@'localhost' identified by "123";// 让数据库 my_db 可以通过 用户名:'127.0.0.1',密码:'123' 访问
grant all on my_db.* to 'zijin'@'127.0.0.1' identified by "123";// 接着在 linux 界面,通过这个语句登录
mysql -hlocalhost -uzijin -p123 -P3306// 只允许查询的权限,相当于只读,这样设置的用户就不能修改数据库
grant select on my_db.* to 'zijin'@'localhost' identified by "123";// 刷新权限
flush privileges;// MySQL 备注或导出
mysqldump -uroot -p123456 my_db >/tmp/my_db.db.sql;
source my_db.db.sql// MySQL 导入
mysql -uroot -p123456 my_db < /tmp/my_db.db.sql; // 修改 MySQL
mysqladmin -uroot -p123456 password newpassword;

  对创建数据库和表删除用下面操作,

// 删除数据库
drop database my_db;// 删除表
drop table tb1;// 清空表内容
delete from tb1;// 查看数据库字符集
show variables like '%char%';

  
  
   这部分是弄错了 ///
  
  
  思考了很久,我还是决定先把登录密码问题先解决吧,不然上面权限相关的都使用不了,而且感觉权限设置也是比较重要的,接下来开始着手解决。步骤如下,

// 1. 查看 sql 的版本号,每个版本号设置方式都不一样,我的是 8. 版本的
mysql --version  // 2. 打开这个文件,键入 i 编辑,按 ESC,输入 : ,再键入 wq! 保存退出
vi /etc/my.cnf// 3. 打开之后在 [mysqld], 任意地方添加这个语句,
skip-grant-tables// 4. 在退出之后,在命令行输入,进入 mysql
mysql
service mysqld start
mysql -u root  // 进入 mysql// 5. 先刷新权限
flush privileges;// 6. 再更改密码
CREATE USER 'root'@'localhost' IDENTIFIED with mysql_native_password BY 'ak47123**';

  通过上面设置,在最后一步把 ‘root’@‘localhost’ 填错了,把进入自己的用户进入 mysql 权限给禁止了,然后找不到解决方法,最后只能重新删除 MySQL,重新装了。。。
  
   这部分弄错了的 ///
  
  接下来删除 linux 上面所有的关于 MySQL 的东西,参考文章为,链接如下:https://www.cnblogs.com/cyl048/p/6879085.html.,然后还有这个链接,其链接如下:https://www.cnblogs.com/tyhj-zxp/p/12706986.html,接下来重新安装。

// 1. 删除 mysql server
yum remove  mysql mysql-server mysql-libs mysql-server;
find / -name mysql // 将找到的相关东西delete掉(rm -rf /var/lib/mysql);
rpm -qa|grep mysql // (查询出来的东东yum remove掉)
rm /etc/my.cnf
rpm -qa|grep mysql
rpm -qa | grep -i mysql // 出来的依次删除
chkconfig --list | grep -i mysql
chkconfig --del mysql
rm -rf /usr/lib/mysql
rm -rf /usr/share/mysql
rm -rf /usr/my.cnf// 2. 安装 mysql server
yum install -y  mysql-community-server// 3. 获取当前临时的密码
grep 'temporary password' /var/log/mysqld.log// 4. 启动 mysql,然后输入临时密码,尽量手动输入
mysql -uroot -p// 5. 更改密码,我的设置为如下
alter user 'root'@'localhost' identified with mysql_native_password by 'Aa1010155952**';// 6. 设置密码的难度和长度
SHOW VARIABLES LIKE 'validate_password%'; // 这个语句可以看相关变量,与mysql版本有关
set global validate_password.policy=0;  // 设置密码等级低
set global validate_password.length=6;  // 最短密码长度为 6// 7. 然后退出就可以使用了
quit// 8. 然后再登录就可以了
mysql -uroot -p

  其结果如下,


  我也不太清楚,为什么按照链接的设置总是出错,感觉 mysql 的版本不兼容,而且容易出现 bug,所以使用还是比较麻烦。现在应该算是弄好了吧,输入自己的密码,然后登录成功了,接着进行学习吧。

2.3 使用 if 条件语句编写 MySQL 备份脚本

  注意反引号输入是键盘上 Esc 下面这个就可以打出反引号 " ` ",注意不是单引号。后来发现数据库权限是非常重要的,所以不得不继续学习,可以在数据库里面,输入一下指令,

mysql> help grant

  查看以后通过这个链接可以查看 grant 相关语句文档,链接如下:
https://dev.mysql.com/doc/refman/8.0/en/grant.html,接下来开始测试效果,因为 mysql 8.0 以后设置权限方式和之前的不一样,因此分为两步进行,为第一步和第二步,并且后面几步是为了和上面学习的承接,修改以后全部都可以用,因此之前遇到的所有问题在这里都解决了

>mysql 指令
// 1. 创建用户名为 backup,密码为 123456 的用户
create user 'backup'@'%' identified by '123456';// 2. 把创建数据库 my_db 所有权限赋给 backup
grant all on my_db.* to 'backup'@'%';// 3. 接着在 linux 界面,通过这个语句登录
mysql -hlocalhost -ubackup -p123456 -P3306// 4. 只允许查询的权限,相当于只读,这样设置的用户就不能修改数据库
grant select on my_db.* to 'backup'@'%';// 5. 刷新权限
flush privileges;linux指令
// 6. MySQL 备注或导出
mysqldump -uroot -pAa1010155952** my_db >/tmp/my_db.db.sql;
source my_db.db.sql// 7. MySQL 导入
mysql -uroot -pAa1010155952** my_db < /tmp/my_db.db.sql; // 8. 修改 MySQL
mysqladmin -uroot -pAa1010155952** password newpassword;

  结果如下




下面的 warning 提醒的是:警告:由于密码将以明文形式发送到服务器,请使用 ssl 连接以确保密码安全。
  接着使用 if 条件语句编写 MySQL 备份脚本,首先创建一个 sh 脚本文件,

touch auto_backup_mysql.sh

  建立打开以后脚本文件如下,

#!/bin/bash
#auto backup mysql db
#define backup up pathBAK_DIR=/data/backup/`date +%Y%m%d`
MYSQLDB=my_db
MYSQLUSR=backup
MYSQLPW=123456
MYSQLCMD=/usr/bin/mysqldumpif [ $UID -ne 0 ];thenecho "Must to be use root for exec shell."exit
fi
if [ ! -d $BAK_DIR ];thenmkdir -p $BAK_DIRecho -e "\033[32mThe $BAK_DIR Successfully!\033[0m"
elseecho "This $BAK_DIR is exists..."
fi#MySQL BACKUP COMMAND
$MYSQLCMD -u$MYSQLUSR -p$MYSQLPW -d $MYSQLDB > $BAK_DIR/$MYSQLDB.sqlif [ $? -eq 0 ];thenecho -e "\033[32mThe Mysql Backup $MYSQLDB Successfully!\033[0m"
elseecho -e "\033[32mThe Mysql Backup $MYSQLDB Failed, Please check.\033[0m"
fi

  输入如下指令

sh auto_backup_mysql.sh

  在运行成功以后,MySQL 输入密码一直错误,然后又进不去了,吐血。搜索说是密码错误的原因,因为之前的经验,我把密码已经用文本记录了,然后输入还是出错,感觉搞 mysql 真的是心态爆炸,各种离谱的原因。

再试试其他方法吧,如果不行,那就用回上面的方法继续来了。重装,继续重装,我就不信了!继续学!
  接着又又又重装好了,很想知道有没有初始化 mysql 的方法,我每次都是重新下载,重新重装,一般网上方法都是重新删除,然后再装,有没有初始化恢复到下载那会,后面再考虑考虑试试。继续学习,对脚本进行分析,

`date +%Y%m%d`  // 显示出今天的日期,比如 20211205// 如果目录不存在,创建一个目录,输出下面字符串,否则输出目录不存在
if [ ! -d $BAK_DIR ];thenmkdir -p $BAK_DIRecho -e "\033[32mThe $BAK_DIR Successfully!\033[0m"
elseecho "This $BAK_DIR is exists..."
fi// $UID 是系统变量,0 是系统用户,nq 是 not equal,0 代表系统用户
// 如果不是系统用户,那么就退出
if [ $UID -ne 0 ];thenecho "Must to be use root for exec shell."exit
fi// 局部变量
BAK_DIR=/data/backup/`date +%Y%m%d`  // 目录
MYSQLDB=my_db  // 数据库名字
MYSQLUSR=backup  // 设定的用户名
MYSQLPW=123456  // 密码
MYSQLCMD=mysqldump  // 备份指令,感觉不需要用/usr/bin/mysqldump// 对数据库文件进行备份
$MYSQLCMD -u$MYSQLUSR -p$MYSQLPW -d $MYSQLDB > $BAK_DIR/$MYSQLDB.sql// $? 最后一个命令或函数的返回值,如果为 0
if [ $? -eq 0 ];then

  如果需要每天去备份这个数据库,通过这样的方式,在命令行输入,

crontable -e

出现一个任务计划,在每天 0 时 0 点运行,并把运行的情况放入 log 文件里面,在文本文件里面插入语句,

0    0 * * * /data/shell/auto_backup_mysql.sh >> /tmp/mysql_bak.log

三、总结

  现在算是懂了怎么把 mysql 环境搭建好,怎么写关于 mysql 的脚本,后面继续深入学习,跟着 up 主把课程走一遍,end.

学习C++项目——mysql 数据库知识学习(关于 mysql 8.0 版以后基础部分学习)相关推荐

  1. 肝了三天的四万字MySQL数据库知识总结

    mysql数据库知识梳理总结 即使再小的帆也能远航~ 一. 目录 数据库介绍 数据库安装 SQL概念 DDL DML操作表中的数据 DQL单表查询 数据库备份和还原 DCL 数据库表的约束 表与表之间 ...

  2. Mysql数据库(四)——mysql索引相关知识

    Mysql数据库(四)--mysql索引相关知识 一.索引的概念 二.索引的优缺点 1.优点 2.缺点 三.创建索引的原则 四.索引的分类和创建方法 1.普通索引 ①.直接创建索引 ②.修改表方式创建 ...

  3. mysql数据库知识解析(一)

    文章目录 1. 数据库的介绍和环境搭建 1.1 数据库介绍 1.1.1 数据存储 1.1.2 理解数据库 1.1.3 MySQL 1.2 环境搭建 2. 数据类型及约束 2.1 SQL介绍&常 ...

  4. python如何删除mysql数据库_python删除数据mysql数据库连接

    Python学习之旅:访问MySQL数据库 Python学习之旅:访问MySQL数据库 MySQL是Web世界中使用最广泛的数据库服务器.为服务器端设计的数据库,能承受高并发访问. python如何使 ...

  5. mysql数据库压缩备份_MySQL数据库之mysql数据库备份命令分享(mysql压缩数据库备份)...

    本文主要向大家介绍了MySQL数据库之mysql数据库备份命令分享(mysql压缩数据库备份) ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 备份MySQL数据库的命令 复制代 ...

  6. java如何实现e的次方_Java开发如何更改MySQL数据库datadir目录之MySQL数据库索引实现...

    引言 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 ...

  7. MySQL数据库教程天花板,mysql安装到mysql高级,强|硬

    MySQL数据库笔记 第一部分 MySQL基础篇 第01章 数据库概述 1. 为什么要使用数据库 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,特别是企业 ...

  8. MySQL数据库教程天花板,mysql安装到mysql高级,强|硬 宋红康版(自用不可外传)

    文章目录 MySQL数据库笔记 第一部分 MySQL基础篇 第01章 数据库概述 1. 为什么要使用数据库 2. 数据库与数据库管理系统 2.1 数据库的相关概念 3. RDBMS与非RDBMS 3. ...

  9. MySQL数据库教程天花板,mysql安装到mysql高级,强|硬 宋红康版

    MySQL数据库教程天花板,mysql安装到mysql高级,强|硬 宋红康版(自用不可外传) 文章目录 MySQL数据库笔记 第一部分 MySQL基础篇 第01章 数据库概述 1. 为什么要使用数据库 ...

最新文章

  1. Java接收多台设备发送消息_FCM(Firebase Cloud 消息传递)发送到多个设备
  2. echarts 堆叠树状图排序
  3. 国二c语言操作题评分标准,全国计算机二级C语言操作题题库.doc
  4. Java线程状态分析
  5. python函数可以作为容器对象吗_正确理解Python函数是第一类对象
  6. 【Mac Buf Install Solution】Mac Buf Not Provide support for this old version Solution
  7. 将小写金额转换成大写金额[存储过程版]
  8. 服务器装2t硬盘分区,2T移动硬盘分区办法
  9. Oracle Data Pump Schema 方式导入导出
  10. KERNEL_DIR、系统平台、交叉编译器的指定,以及内核模块驱动文件的签名
  11. 英文经典老歌列表~~~~
  12. Binary Exponential Backoff
  13. win101909要不要更新_win101909更新了哪些内容?Win10 1909千万别更新原因
  14. ubuntu teamviewer被检测为商业用途
  15. 魔数湖南大学程序设计作业
  16. 给开酒馆的小白六句忠告(下)
  17. vue 点击谁 谁变色
  18. HTML <ins> 标签
  19. 第二届 IstioCon 演讲议题正在征集中
  20. TestEngine with ID ‘junit-vintage‘ failed to discover tests

热门文章

  1. map() 与 nest.map_structure() 的区别及用法
  2. Linux 基本命令(一)--ls 常用命令
  3. gitlib命令的使用
  4. 大型网站架构系列:20本技术书籍推荐
  5. HTML 5 学习笔记之 canvas 标签
  6. N35-第十四周作业
  7. SCCM2012 R2实战系列之五:发现方法
  8. oracle视图建主键
  9. 字符串、数值 等类型的相互 安全转换
  10. VMware 下安装centos7,无法进入图形化界面