学习数据库知识
一、思路和学习方法
本文学习于: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 // 进入 mysql
mysql>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 path
BAK_DIR=/data/backup/`date +%Y%m%d`
MYSQLDB=my_db
MYSQLUSR=backup
MYSQLPW=123456
MYSQLCMD=/usr/bin/mysqldump
if [ $UID -ne 0 ];then
echo "Must to be use root for exec shell."
exit
fi
if [ ! -d $BAK_DIR ];then
mkdir -p $BAK_DIR
echo -e "\033[32mThe $BAK_DIR Successfully!\033[0m"
else
echo "This $BAK_DIR is exists..."
fi
#MySQL BACKUP COMMAND
$MYSQLCMD -u$MYSQLUSR -p$MYSQLPW -d $MYSQLDB > $BAK_DIR/$MYSQLDB.sql
if [ $? -eq 0 ];then
echo -e "\033[32mThe Mysql Backup $MYSQLDB Successfully!\033[0m"
else
echo -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 ];then
mkdir -p $BAK_DIR
echo -e "\033[32mThe $BAK_DIR Successfully!\033[0m"
else
echo "This $BAK_DIR is exists..."
fi
// $UID 是系统变量,0 是系统用户,nq 是 not equal,0 代表系统用户
// 如果不是系统用户,那么就退出
if [ $UID -ne 0 ];then
echo "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.