阿铭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