Stay Curious, Stay Naive.
首页 归档 标签 关于

SQL快速运用指南

MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

安装

# 启动mysql 
sudo systemctl start mysql
# 查看mysql 状态
sudo systemctl status mysql

# 查看mysql 配置 
vim /etc/mysql/mariadb.conf.d/50-server.cnf

# 查看系统中的mysql进程
ps -aux | grep "mysql"
ps -ef | grep mysql

# 杀掉mysql进程 提示 bash: kill: (4385) - Operation not permitted, 因为没有权限,要使用sudo
sudo kill -15
  • 问题:访问数据库报错 ERROR 1524 (HY000): Plugin ‘unix_socket’ is not loaded
  • 解决:在配置文件[mysqld] 下增加 plugin-load-add = auth_socket.so, 重启服务。

安全管理

管理用户

  1. 查看用户
USE mysql;
SELECT user FROM user;
  1. 创建用户 spaceack, 密码为 password123
CREATE USER spaceack IDENTIFIED BY 'password123';
  1. 为用户授予数据库权限
grant all privileges on `数据库名`.* to '用户名'@'localhost';
flush privileges;

命令

# 连接数据库管理系统 mysql -u root -p -h localhost -P 3306

# 查看所有数据库 SHOW DATABASES;

# 使用数据库 USE mysql;

# 查看数据库中的所有表列表 SHOW TABLES;

显示表列 SHOW COLUMNS FROM help_keyword;

+-----------------+------------------+------+-----+---------+-------+
| Field           | Type             | Null | Key | Default | Extra |
+-----------------+------------------+------+-----+---------+-------+
| help_keyword_id | int(10) unsigned | NO   | PRI | NULL    |       |
| name            | char(64)         | NO   | UNI | NULL    |       |
+-----------------+------------------+------+-----+---------+-------+

DESCRIBE help_keyword;
DESC help_keyword;

显示建库语句
 SHOW CREATE DATABASE mysql;
显示建表语句
 SHOW CREATE TABLE help_keyword;

显示用户安全权限
SHOW GRANTS

显示服务器状态: SHOW STATUS;

备份

Mysql备份类型

按照备份时对数据库的影响分为
  • Hot backup(热备):也叫在线备份。指在数据库运行中直接备份,对正在运行的数据库没有任何影响。
  • Cold backup(冷备):也叫离线备份。指在数据库停止的情况下备份。
  • Warm backup(温备):在数据库运行时备份,会加一个全局锁以保证数据的一致性,会对当前数据库的操作有影响。
按照备份后的文件内容分为
  • 逻辑备份:指备份后的文件内容是可读的,通常为文本文件,内容一般是SQL语句或表内的实际数据(mysqldump和select * into outfile),一般适用于数据库的升级和迁移,还原时间较长。适用于中小型数据库,效率相对较低。
  • 裸文件备份:也叫物理备份。拷贝数据库的物理文件,数据库既可以处于运行状态(mysqlhotcopy、ibbackup、xtrabackup一类工具),也可以处于停止状态,还原时间较短。,适用于大型数据库环境,但不能恢复到异构环境中,如windows。
  • 导出表:直接将表导入到文本文件中。
按照备份数据库的内容分为
  • 完全备份:对数据库进行完整的备份。
  • 增量备份:在上一次完整备份的基础上,对更新的数据进行备份(xtrabackup)
  • 日志备份:二进制日志备份,主从同步。

工具:

  1. mysqldump, 是逻辑备份工具,支持MyISAM和InnoDB引擎。数据库运行时,MyISAM,Aria引擎只支持温备,InnoDB支持热备和温备。单线程备份恢复较慢。
  2. Xtrabackup(innobackupex工具), 备份mysql大数据; InnoDB支持,增量备份;MyISAM温备,不支持增量。属于物理备份,速度快;
  3. lvm-snapshot, 先请求全局锁,再创建快照,后释放全局锁;备份和恢复速度快。
    可以使用MySQL的 BACKUP TABLE 或 SELECT INTO OUTFILE 转储所 有数据到某个外部文件。这两条语句都接受将要创建的系统文件 名,此系统文件必须不存在,否则会出错。数据可以用 RESTORE TABLE 来复原。

实例

备份数据库:
/usr/bin/mysqldump --routines -h127.0.0.1 -uroot -ppassword --add-drop-table --disable-keys --extended-insert --single-transaction database_name > database_name_date.sql
恢复备份
mysql -uroot -ppassword -Ddatabase_name < database_name_date.sql
备份包含 blob 类型字段的表

需要添加 –hex-blob 参数

mysqldump --no-defaults --hex-blob -h127.0.0.1 -R -uroot -p --databases test_db --table test_table > test_table_backup.sql
备份恢复
sudo mysql -u root -p --database=test_db < test_table_backup.sql

概念术语表

SQL (Structured Query Language) 结构化查询语言:
database 数据库
DBMS 数据库管理系统
table 表: 某种特定类型数据的结构化清单。
schema 模式: 关于数据库和表的布局及特性信息。
column 列:
datatype 数据类型:
row 行/record 记录:
primary key 主键:一列(或一组列),其值能够唯一区分表中每个行。

应该总是定义主键 主键的最好习惯:
不更新主键列中的值;
不重用主键列的值;
不在主键列中使用可能会更改的值。