基本概述

mysql简介

部署环境

实验步骤

1、Mysql 下载地址:
https://downloads.mysql.com/archives/community/

下载安装包:
https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.20.tar.gz

[root@localhost ~]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.20.tar.gz
--2021-04-07 09:48:21--  https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.20.tar.gz
Resolving downloads.mysql.com (downloads.mysql.com)... 137.254.60.14
Connecting to downloads.mysql.com (downloads.mysql.com)|137.254.60.14|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.20.tar.gz [following]
--2021-04-07 09:48:23--  https://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.20.tar.gz
Resolving cdn.mysql.com (cdn.mysql.com)... 184.31.28.242
Connecting to cdn.mysql.com (cdn.mysql.com)|184.31.28.242|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 32979820 (31M) [application/x-tar-gz]
Saving to: ‘mysql-5.6.20.tar.gz’

100%[=========================================>] 32,979,820  9.70MB/s   in 3.2s   

2021-04-07 09:48:26 (9.70 MB/s) - ‘mysql-5.6.20.tar.gz’ saved [32979820/32979820]

[root@localhost ~]# 

2、解压安装包

[root@localhost ~]# tar xf mysql-5.6.20.tar.gz
[root@localhost ~]# ls
anaconda-ks.cfg  mysql-5.6.20  mysql-5.6.20.tar.gz  perl5  yum_back
[root@localhost ~]# 

3、安装依赖工具(gcc c ncurses ncurses-devel cmake libaio bison gcc-c++ git)

  • yum 安装
[root@localhost ~]# yum -y install gcc c ncurses ncurses-devel cmake libaio bison gcc-c++  git 

Cmake工具和configure工具,configure二进制程序用来生成Makefile文件,Makefile记录软件需要的环境和要编译的参数

[root@localhost ~]# cd mysql-5.6.20
[root@localhost mysql-5.6.20]# ls
BUILD            dbug                 libmysqld    regex          unittest
BUILD-CMAKE      Docs                 libservices  scripts        VERSION
client           Doxyfile-perfschema  man          sql            vio
cmake            extra                mysql-test   sql-bench      win
CMakeLists.txt   include              mysys        sql-common     zlib
cmd-line-utils   INSTALL-SOURCE       mysys_ssl    storage
config.h.cmake   INSTALL-WIN-SOURCE   packaging    strings
configure.cmake  libevent             plugin       support-files
COPYING          libmysql             README       tests
[root@localhost mysql-5.6.20]# cd
[root@localhost ~]# 
[root@localhost ~]# cd mysql-5.6.20
[root@localhost mysql-5.6.20]# cmake  .  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql55/ \
> -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
> -DMYSQL_DATADIR=/data/mysql \
> -DSYSCONFDIR=/etc \
> -DMYSQL_USER=mysql \
> -DMYSQL_TCP_PORT=3306 \
> -DWITH_XTRADB_STORAGE_ENGINE=1 \
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \
> -DWITH_PARTITION_STORAGE_ENGINE=1 \
all \
-DWITH_BIG_TABLES=1 \
-DWITH_DEBUG=0> -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
> -DWITH_MYISAM_STORAGE_ENGINE=1 \
> -DWITH_READLINE=1 \
> -DENABLED_LOCAL_INFILE=1 \
> -DWITH_EXTRA_CHARSETS=1 \
> -DDEFAULT_CHARSET=utf8 \
> -DDEFAULT_COLLATION=utf8_general_ci \
> -DEXTRA_CHARSETS=all \
> -DWITH_BIG_TABLES=1 \
> -DWITH_DEBUG=0

5、make 编译

  • make -j4
[root@localhost mysql-5.6.20]# make -j4

6、make install

  • make install安装
[root@localhost mysql-5.6.20]# make install -j4

7、设置配置文件

  • 创建配置文件
[root@localhost mysql-5.6.20]# cd /usr/local/mysql55/
[root@localhost mysql55]# ll support-files/
total 32
-rwxr-xr-x 1 root root  1153 Apr  7 20:08 binary-configure
-rw-r--r-- 1 root root   773 Jul 18  2014 magic
-rw-r--r-- 1 root root  1126 Apr  7 20:08 my-default.cnf
-rwxr-xr-x 1 root root  1061 Apr  7 20:08 mysqld_multi.server
-rwxr-xr-x 1 root root   880 Apr  7 20:08 mysql-log-rotate
-rwxr-xr-x 1 root root 10880 Apr  7 20:08 mysql.server

[root@localhost mysql55]# \cp -f support-files/my-default.cnf /etc/my.cnf
[root@localhost mysql55]# \cp -f support-files/mysql.server /etc/init.d/mysqld 

8、设置服务启动

  • 测试
[root@localhost mysql55]# chkconfig --add mysqld
[root@localhost mysql55]# chkconfig --level 35 mysqld on

9、创建用户、目录,并修改权限

  • /data/mysql数据库数据存放位置
  • 创建mysql用户
  • 修改权限
[root@localhost mysql55]# mkdir -p /data/mysql
[root@localhost mysql55]# useradd -M -s /sbin/nologin mysql
[root@localhost mysql55]# chown -R mysql.mysql /data/mysql/
[root@localhost mysql55]# /usr/local/mysql55/scripts/mysql_install_db --user=mysql --datadir=/data/mysql/ --basedir=/usr/local/mysql55/
FATAL ERROR: please install the following Perl modules before executing /usr/local/mysql55/scripts/mysql_install_db:   
Data::Dumper

这里报错,根据提示,安装perl*,然后再次初始化
[root@localhost ~]# yum -y install perl*
[root@localhost mysql55]# /usr/local/mysql55/scripts/mysql_install_db --user=mysql --datadir=/data/mysql/ --basedir=/usr/local/mysql55/
......

[root@localhost mysql55]# ln -s /usr/local/mysql55/bin/* /usr/bin/   将mysql bin下面的执行程序连接到/usr/bin

10、启动、测试

  • service mysqld start
  • /etc/init.d/mysqld stop
  • systemctl start mysqld
[root@localhost ~]# service mysqld start
Starting MySQL.. SUCCESS! 
[root@localhost ~]# 

MYSQL数据库配置文件详解

  • 常见的配置文件参数
[mysqld]   											服务器端配置
 datadir=/data/mysql   								数据目录
 socket=/var/lib/mysql/mysql.sock   				socket通信设置  
 user=mysql 										使用mysql用户启动
  
 symbolic-links=0  									是否支持快捷方式
 log-bin=mysql-bin  								开启bin-log日志
 server-id = 1  									mysql服务ID
 auto_increment_offset=1    	
 auto_increment_increment=2

 [mysqld_safe]  									mysql服务安全启动配置
 log-error=/var/log/mysqld.log  
 pid-file=/var/run/mysqld/mysqld.pid   
key_buffer_size 									指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。一般为内存的50%
show variables like ‘key_buffer_size‘;
max_connections = 3000
													每个客户端连接最大的错误允许数量,如果达到了此限制,这个客户端将会被MySQL服务阻止直到执行了”FLUSH  HOSTS”或者服务重启.
innodb_buffer_pool_size
													对于InnoDB表来说,innodb_buffer_pool_size的作用就相当于key_buffer_size对于MyISAM表的作用一样。InnoDB使用该参数指定大小的内存来缓冲数据和索引。
对于单独的MySQL数据库服务器,最大可以把该值设置成物理内存的80%。

根据MySQL手册,对于2G内存的机器,推荐值是1G(50%)。
basedir      = path          					# 使用给定目录作为根目录(安装目录)。
datadir      = path         				    # 从给定目录读取数据库文件。
pid-file     = filename      					# 为mysqld程序指定一个存放进程ID的文件(仅适用于UNIX/Linux系统); 
[mysqld]                        
socket = /tmp/mysql.sock     					# 为MySQL客户程序与服务器之间的本地通信指定一个套接字文件(Linux下默认是/var/lib/mysql/mysql.sock文件)
port             = 3306      					# 指定MsSQL侦听的端口 
key_buffer       = 384M      					# key_buffer是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写)。索引块是缓冲的并且被所有的线程共享,key_buffer的大小视内存大小而定。
table_cache      = 512       					# 为所有线程打开表的数量。增加该值能增加mysqld要求的文件描述符的数量。可以避免频繁的打开数据表产生的开销
sort_buffer_size = 2M        					# 每个需要进行排序的线程分配该大小的一个缓冲区。增加这值加速ORDER BY或GROUP BY操作。注意:该参数对应的分配内存是每连接独占!如果有100个连接,那么实际分配的总共排序缓冲区大小为100×6=600MB
read_buffer_size = 2M       					 # 读查询操作所能使用的缓冲区大小。和sort_buffer_size一样,该参数对应的分配内存也是每连接独享。
query_cache_size = 32M       					# 指定MySQL查询结果缓冲区的大小
read_rnd_buffer_size    = 8M 					# 改参数在使用行指针排序之后,随机读用的。
myisam_sort_buffer_size = 64M 					# MyISAM表发生变化时重新排序所需的缓冲
thread_concurrency      = 8  					# 最大并发线程数,取值为服务器逻辑CPU数量×2,如果CPU支持H.T超线程,再×2
thread_cache            = 8  					#缓存可重用的线程数
skip-locking            						# 避免MySQL的外部锁定,减少出错几率增强稳定性。 
[mysqldump]
max_allowed_packet      =16M 					# 服务器和客户端之间最大能发送的可能信息包

MYSQL 密码管理

MYSQL数据库在使用过程中为了加强安全防范,需要设置密码访问,如何设置密码,及密码忘记如何破解,如下设置密码授权,密码修改及破解的方法。

MYSQL 创建用户授权

  • 权限
数据库名.*            数据库中的所有
数据库名.表           指定数据库中的某张表
数据库名.存储过程      指定数据库中的存储过程
*.*                   所有数据库
1
2
3
4
授权localhost主机通过huang用户和admin123密码访问本地的ISP库的所有权限;
mysql> grant all on  ISP.* to huang@localhost identified by 'admin123';
Query OK, 0 rows affected (0.21 sec)
1
2
授权所有主机通过hun 用户和123密码访问本地ISP库的查询、插入、更新、删除权限
mysql> grant select,insert,update,delete on *.* to hun@"%" identified by '123';
Query OK, 0 rows affected (0.00 sec)
1
2
授权192.168.10.10主机通过huang用户和admin123密码访问本地的ISP库的所有权限;
mysql> grant all on ISP.* to huang@'192.168.10.10' identified by 'admin123';
Query OK, 0 rows affected (0.00 sec)

MYSQL 密码破解方法

  • 在配置文件[mysqld]模块中添加skip-grant-tables
[root@localhost ~]# /etc/init.d/mysqld stop      1、停止mysql服务
Shutting down MySQL. SUCCESS! 
[root@localhost ~]# 

[root@localhost ~]# vim /etc/my.cnf              2、修改配置文件
[root@localhost ~]# cat /etc/my.cnf|grep skip-grant*
skip-grant-tables
[root@localhost ~]# /etc/init.d/mysqld restart   3、重启mysql 服务,
 ERROR! MySQL server PID file could not be found!
Starting MySQL.. SUCCESS! 

[root@localhost ~]# mysql                         4、没有密码进入mysql
mysql> use mysql;								  使用mysql数据库
Database changed
mysql> 
mysql> update user set password = Password('hebao') where user = 'root';										   5、修改密码
mysql> flush privileges;						  6、刷新权限
mysql> quit;

总结

MYSQL 用户操作

连接数据库

mysql  -u user -p                   
例:mysql -u root -p
常见错误如下:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2), it means that the MySQL server daemon (Unix) or service (Windows) is not running.
退出连接:
QUIT 或者 Ctrl+D

查看、创建、使用数据库,表

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

mysql> create database S default charset utf8 collate utf8_general_ci;

mysql> use S;
Database changed
mysql> show tables;
Empty set (0.00 sec)

用户操作

  • 创建用户
 创建用户
 create user '用户名'@'IP地址' identified by '密码';
 删除用户
 drop user '用户名'@'IP地址';
 修改用户
 rename user '用户名'@'IP地址' to '新用户名'@'IP地址';
 修改密码
 set password for '用户名'@'IP地址' = Password('新密码');
 注:用户权限相关数据保存在mysql数据库的user表中,所以也可以直接对其进行操作(不建议)
 
 
 mysql> create user 'hbs'@'192.168.10.10' identified by '123';
 Query OK, 0 rows affected (0.00 sec)
 
 mysql> drop user 'hbs'@'192.168.10.10';
 Query OK, 0 rows affected (0.00 sec)
 
 
 mysql> rename user 'hbs'@'192.168.10.10' to 'liuaoni'@'192.168.10.13';
 Query OK, 0 rows affected (0.00 sec)
 
 mysql> 
 mysql> set password for 'liuaoni'@'192.168.10.13'=Password('!23');
 Query OK, 0 rows affected (0.00 sec)
 
 mysql> 

MYSQL 表操作

  • 查看表
show tables; 	 			查看数据库全部表
select * from 表名;  		   查看表所有内容

创建表

create table 表名(
    列名  类型  是否可以为空,
    列名  类型  是否可以为空
)ENGINE=InnoDB DEFAULT CHARSET=utf8
来一个实例好详解
CREATE TABLE `tab1` (
  `nid` int(11) NOT NULL auto_increment,
  `name` varchar(255) DEFAULT test,
  `email` varchar(255),
  PRIMARY KEY (`nid`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
注:
默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值
自增,如果为某列设置自增列,插入数据时无需设置此列,默认将自增(表中只能有一个自增列)注意:1、对于自增列,必须是索引(含主键)2、对于自增可以设置步长和起始值
主键,一种特殊的唯一索引,不允许有空值,如果主键使用单个列,则它的值必须唯一,如果是多列,则其组合必须唯一。

删除表

drop table  表名

清空表内容

delete from 表名
truncate table 表名

修改表内容

添加列:   
alter table 表名 add 列名 类型
删除列:   
alter table 表名 drop column 列名
修改列:
alter table 表名 modify column 列名 类型;  -- 类型
alter table 表名 change 原列名 新列名 类型; -- 列名,类型
添加主键:
alter table 表名 add primary key(列名);
删除主键:
alter table 表名 drop primary key;
alter table 表名  modify  列名 int, drop primary key;
添加外键: 
alter table 从表 add constraint 外键名称(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);
删除外键: 
alter table 表名 drop foreign key 外键名称
修改默认值:
ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
删除默认值:
ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;

数据库表内容的操作(增删改查)

nsert into 表 (列名,列名...) values (值,值,...)
insert into 表 (列名,列名...) values (值,值,...),(值,值,值...)
insert into 表 (列名,列名...) select (列名,列名...) from 表
例:
    insert into tab1(name,email) values('test','test8851@163.com')

delete from 表   # 删除表里全部数据
delete from 表 where id=1 and name='test' # 删除ID =1 和name='test' 那一行数据

update 表 set name = 'test' where id>1

select * from 表
select * from 表 where id > 1
select nid,name,gender as gg from 表 where id > 1
查这块的条件太多太多我给列举出来至于组合还得看大家的理解程度哈

a、条件判断where
select * from 表 where id > 1 and name != 'aylin' and num = 12;
select * from 表 where id between 5 and 16;
select * from 表 where id in (11,22,33)
select * from 表 where id not in (11,22,33)
select * from 表 where id in (select nid from 表)

b、通配符like
select * from 表 where name like 'zhang%'  # zhang开头的所有(多个字符串)
select * from 表 where name like 'zhang_'  # zhang开头的所有(一个字符)

c、限制limit
select * from 表 limit 5;            - 前5行
select * from 表 limit 4,5;          - 从第4行开始的5行
select * from 表 limit 5 offset 4    - 从第4行开始的5行


d、排序asc,desc
select * from 表 order by 列 asc              - 根据 “列” 从小到大排列
select * from 表 order by 列 desc             - 根据 “列” 从大到小排列
select * from 表 order by 列1 desc,列2 asc    - 根据 “列1” 从大到小排列,如果相同则按列2从小到大排序


e、分组group by
select num from 表 group by num
select num,nid from 表 group by num,nid
select num,nid from 表  where nid > 10 group by num,nid order nid desc
select num,nid,count(*),sum(score),max(score),min(score) from 表 group by num,nid
select num from 表 group by num having max(id) > 10
特别的:group by 必须在where之后,order by之前

如果感觉小编写得不错,请素质三连:点赞+转发+关注。我会努力写出更好的作品分享给大家。更多JAVA进阶学习资料小编已打包好,可以关注私信找我领取哦!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐