基本概述
mysql简介
部署环境
实验步骤
1、Mysql 下载地址:https://downloads.mysql.com/archives/community/
[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、解压安装包
- tar xf mysql-5.6.20.tar.gz
[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
4、使用cmake预编译
- Cmake 是一种跨平台的编译工具,比configure更高级,cmake主要编写cmakelists.txt,然后用cmake命令将cmakelists.txt转化成make需要的Makefile文件,最后用make命令编译源码生成的可执行程序。
- 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 创建用户授权
- 权限
数据库名.* 数据库中的所有 数据库名.表 指定数据库中的某张表 数据库名.存储过程 指定数据库中的存储过程 *.* 所有数据库
- 授权localhost主机通过huang用户和admin123密码访问本地的ISP库的所有权限;
mysql> grant all on ISP.* to huang@localhost identified by 'admin123'; Query OK, 0 rows affected (0.21 sec)
- 授权所有主机通过hun 用户和123密码访问本地ISP库的查询、插入、更新、删除权限
mysql> grant select,insert,update,delete on *.* to hun@"%" identified by '123'; Query OK, 0 rows affected (0.00 sec)
- 授权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之前