数据库的基本概念
字段:表的标题
记录:文件中的一行内容
表:文件
库:文件夹
数据库管理软件:本质就是一个基于网络通信的套接字软件socket
数据库服务器:运行数据库管理软件服务端的计算机
数据库管理软件分为两大类
关系型:MySQL、oracle、db2、sqlserver
非关系型:key:value--->查询速度快mongodb、redis、memcache
数据库的优化
统一字符编码
#1. 修改配置文件
[mysqld]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
#mysql5.5以上:修改方式有所改动
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
#2. 重启服务
#3. 查看修改结果:
s
show variables like '%char%';
忘记密码修改重启
vi /etc/my.cnf
[mysqld] #下面加上:
skip-grant-tables
update mysql.user set password=password("123") where user="root" and host="localhost";
flush privileges;
基础SQL语句
库
# 增
MariaDB [(none)]> create database db1 charset utf8mb4;
# 改
MariaDB [(none)]> alter database db1 charset gbk;
# 查
MariaDB [(none)]> show create database db1;
# 删
MariaDB [(none)]> drop database db1;
表
# 增
MariaDB [(none)]> create table db1.t1(id int,name varchar(16));
# 改
MariaDB [(none)]> alter table t1 modify name varchar(20);
# 查
MariaDB [db1]> show create table t1;
MariaDB [(none)]> desc t1;
# 删
MariaDB [(none)]> drop table t1;
记录
# 增
MariaDB [(none)]> insert db1.t1 values(1,"baim0"),(2,"tom"),(3,"jack");
MariaDB [(none)]> insert db1.t1(name,id) values(5,"lili");
MariaDB [(none)]> insert db1.t1(id) values(5);
# 改
MariaDB [(none)]> update db1.t1 set name="JACK" where id=3;
# 查
MariaDB [db1]> select * from db1.t1;
MariaDB [db1]> select id,name from db1.t1;
MariaDB [db1]> select id,name from db1.t1 where id=1;
MariaDB [db1]> select id,name from db1.t1 where id<3;
# 删
MariaDB [(none)]> delete from db1.t1 where id=3;
# 清空
MariaDB [(none)]> delete from db1.t1;# 不要这么干
MariaDB [(none)]> truncate db1.t1; #把表所有状态还原成初始状态
MySQL数据备份
使用mysqldump实现逻辑备份
#语法:
# mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql
#示例:
#单库备份
mysqldump -uroot -p123 db1 > db1.sql
mysqldump -uroot -p123 db1 table1 table2 > db1-table1-table2.sql
#多库备份
mysqldump -uroot -p123 --databases db1 db2 mysql db3 > db1_db2_mysql_db3.sql
#备份所有库
mysqldump -uroot -p123 --all-databases > all.sql
恢复逻辑备份
#方法一:
[root@egon backup]# mysql -uroot -p123 < /backup/all.sql
#方法二:
mysql> use db1;
mysql> SET SQL_LOG_BIN=0;
mysql> source /root/db1.sql
#注:如果备份/恢复单个库时,可以修改sql文件
DROP database if exists school;
create database school;
use school;
备份脚本
备份计划:
1. 什么时间 2:00
2. 对哪些数据库备份
3. 备份文件放的位置
备份脚本:
[root@egon ~]# vim /mysql_back.sql
#!/bin/bash
back_dir=/backup
back_file=`date +%F`_all.sql
user=root
pass=123
if [ ! -d /backup ];then
mkdir -p /backup
fi
# 备份并截断日志
mysqldump -u${user} -p${pass} --events --all-databases > ${back_dir}/${back_file}
mysql -u${user} -p${pass} -e 'flush logs'
# 只保留最近一周的备份
cd $back_dir
find . -mtime +7 -exec rm -rf {} ;
手动测试:
[root@egon ~]# chmod a+x /mysql_back.sql
[root@egon ~]# chattr +i /mysql_back.sql
[root@egon ~]# /mysql_back.sql
配置cron:
[root@egon ~]# crontab -l
2 * * * /mysql_back.sql
数据库的迁移
务必保证在相同版本之间迁移
# mysqldump -h 源IP -uroot -p123 --databases db1 | mysql -h 目标IP -uroot -p456