MySQL基础教程:轻松掌握

发表时间: 2023-02-03 09:06

阿铭linux近16年的IT从业经验,6年+鹅厂运维经验,6年+创业公司经验,熟悉大厂运维体系,有从零搭建运维体系的实战经验。关注我,学习主流运维技能,让你比别人提升更快,涨薪更多!

16.1 MySQL简介

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL 作为网站数据库。

16.2 MySQL版本

MySQL分社区版和商业版,社区版也就是开源版本,完全免费,而商业版要比社区版多了一些商业定制功能,需要收费。而本教程中介绍的是社区版。

目前MySQL社区版有两个主流活跃版本:5.7和8.0。据我观察,MySQL每隔3个月就会发一个小版本,更新迭代速度非常快。

截至阿铭发表此文章时,5.7最新版本为5.7.40,而8.0最新版本为8.0.31。由于个别应用开发环境使用的是5.7.x,所以我们只能使用5.7.x版本的MySQL。如果没有特殊要求,一定要用8.0,因为8.0版本的MySQL要比5.7快不少。

本教程中,阿铭使用的是8.0.31。5.7版本和8.0版本在使用上稍有差异,但差异不太大。

16.3 MySQL安装(Centos/Rocky/Ubuntu都一样)

1)下载

cd  /usr/localcurl -O https://cdn.mysql.com/Downloads/MySQL-8.0/mysql-8.0.31-linux-glibc2.12-x86_64.tar.xz

2)解压

tar Jxf mysql-8.0.31-linux-glibc2.12-x86_64.tar.xzln -s mysql-8.0.31-linux-glibc2.12-x86_64 mysql

3)创建用户

useradd -s /sbin/nologin  mysql

4)创建数据目录

mkdir -p /data/mysqlchown -R mysql:mysql /data/mysql

5)定义配置文件

vi  /etc/my.cnf  #写入如下内容[mysql]port = 3306socket = /tmp/mysql.sock[mysqld]user = mysqlport = 3306basedir = /usr/local/mysqldatadir = /data/mysqlsocket = /tmp/mysql.sockpid-file = /data/mysql/mysqld.pidlog-error = /data/mysql/mysql.err

6)安装依赖

##Rocky / CentOSyum install -y ncurses-compat-libs-6.1-9.20180224.el8.x86_64  libaio-devel## Ubuntusudo  apt install  libaio-dev libtinfo5

7)初始化

/usr/local/mysql/bin/mysqld --console --initialize-insecure --user=mysql   ## initialize-insecure使用空密码

8)启动

vi /usr/lib/systemd/system/mysqld.service  #写如下内容[Unit]Description=MYSQL serverAfter=network.target[Install]WantedBy=multi-user.target[Service]Type=forkingTimeoutSec=0PermissionsStartOnly=trueExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --daemonize $OPTIONSExecReload=/bin/kill -HUP -$MAINPID     #这里-HUP可以是改成-s HUP,就变成强制杀进程,有需要可以改,下面也一样ExecStop=/bin/kill -QUIT $MAINPID        #-s QUIT是强制杀进程KillMode=processLimitNOFILE=65535Restart=on-failureRestartSec=10RestartPreventExitStatus=1PrivateTmp=false

重新加载并启动服务

sudo systemctl daemon-reloadsudo systemctl enable mysqldsudo systemctl start mysqld

9)配置环境变量

vi  /etc/profile  #最后面增加下面一行内容export PATH=$PATH:/usr/local/mysql/bin

然后执行下面命令,使其生效

sudo source  /etc/profile

10)设置密码

mysqladmin -uroot  password  'your_new_passwd'


16.4 重置MySQL root密码

MySQL root为管理员用户,如果root用户密码忘记,我们是有方法来重置的。

修改配置文件

vi /etc/my.cnf  #增加skip-grant-tables

重启mysql服务

systemctl  restart mysqld

登录MySQL

mysql -uroot

在MySQL命令行里执行:

mysql> use mysql;mysql> UPDATE user SET authentication_string="" WHERE user="root";  ##这里就是要删除掉原来密码

再次修改配置文件

 vi /etc/my.cnf  #删除skip-grant-tables 参数

重启服务

systemctl restart mysqld

再次登录MySQL

mysql -uroot

在MySQL命令行里,重置密码

mysql> use mysql; mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Aminglinux.com';mysql> flush privileges;


16.5 连接MySQL

1)连接本机的MySQL

mysql -uroot -pAminglinux.com #-p后面跟密码,如果有特殊符号要带单引号,-p后面不用带空格

2)连接远程机器

 mysql -uroot -pAminglinux.com -h127.0.0.1 -P3306 #-P后面跟端口号

3)使用socket文件连接(本地)

mysql -uroot -pAminglinux.com -S/tmp/mysql.sock #-S后面g跟socket文件路径

4)直接在shell里运行MySQL命令

mysql -uroot -pAminglinux.com -e "show databases" #-e后面跟要运行的命


16.6 MySQL常用命令

1)查询库

mysql> show databases;

2)切换库

mysql> use mysql;

3)查看库里的表

mysql> show tables;

4)查看表里的字段

mysql> desc tb_name;

5)查看建表语句

show create table tb_name\G

6)查看当前用户

mysql> select user();

7)查看当前使用的数据库

mysql> select database();

8)创建库

mysql> create database db1;

9)创建表

mysql> use db1; create table t1(`id` int(4), `name` char(40));

10)查看当前数据库版本

mysql> select version();

11)查看数据库状态

mysql> show status;

12)查看各参数

mysql> show variables; #查看所有参数mysql> show variables like 'max_connect%'; #过滤关键词

13)修改参数

mysql> set global max_connect_errors=1000; #设置指定参数

14)查看队列

mysql> show processlist; mysql> show full processlist; #显示的更全


16.7 MySQL创建用户和授权

1)创建用户,客户端允许为所有

mysql> create user 'user1'@'%' identified by 'Abc.123.com';

2)授权所有权限,所有库,所有表

mysql> grant all on *.* to 'user1' ;#all表示所有权限(比如,select/update/insert/delete等全部权限),第一个*表示所有库,第二个*表示所有表

3)创建用户,客户端允许某个IP段

mysql> create user 'user2'@'192.168.133.%' identified by 'passwd';

4)授权指定权限

mysql> grant SELECT,UPDATE,INSERT on db1.* to 'user2'@'192.168.133.1';

5)查看授权情况

mysql> show grants;mysql> show grants for user2@192.168.133.1;


16.8 常用sql语句

SQL是关系型数据库的核心,除了MySQL外,其它关系型数据库也是用这些SQL。下面阿铭就给大家列几个最常用的SQL命令。

mysql> select count(*) from mysql.user; #查表的行数mysql> select * from mysql.db; #查表的所有内容mysql> select db from mysql.db; #查看db表里db列内容mysql> select db,user from mysql.db; #查看多列mysql> select * from mysql.db where host like '192.168.%'; #查看表内容,设定条件mysql> insert into db1.t1 values (1, 'abc'); #插入数据mysql> update db1.t1 set name='aaa' where id=1; #插入数据,带条件mysql> truncate table db1.t1; #清空表mysql> drop table db1.t1; #删除表mysql> drop database db1; #删除库


16.9 mysql数据库备份和恢复

1)备份库

mysqldump -uroot -pAminglinux.com mysql > /tmp/mysql.sql

2)恢复库

mysql -uroot -pAminglinux.com mysql < /tmp/mysql.sql

3)备份表

mysqldump -uroot -pAminglinux.com mysql user > /tmp/user.sql

4)恢复表

mysql -uroot -pAminglinux.com mysql < /tmp/user.sql

5)备份所有库

mysqldump -uroot -p -A >/tmp/123.sql

6)备份指定库

mysqldump -uroot -p -B db1 db2 > /tmp/db1_db2.sql

7)只备份表结构

mysqldump -uroot -pAminglinux.com -d mysql > /tmp/mysql.sql