Mysql安装
1、安装
下载Mysql安装包
http://test.hexin.cn/software/mysql-5.7.9.tar.gz -P /usr/local/src/
http://test.hexin.cn/software/cmake-3.4.0.tar.gz -P /usr/local/src/
2、配置环境变量
1.打开cmd(可以使用win + R 键快捷打开),打开后进入mysql的安装目录:我的安装目录是:D:\work\work_soft\mysql-5.7.27-winx64\mysql-5.7.27-winx64\bin
2.进入目录后执行以下命令初始化数据库:mysqld --initialize --console ;
3.输入mysql安装命令:mysqld install # mysql安装命令
4.启动mysql服务:net start mysql
5.输入命令登录mysql:mysql -u 用户名 -p 密码(可以自行更改密码:set password for root@localhost = password(‘新密码’))
6.右键单击打开属性,在系统变量中,选择 “path” 并单击 “编辑” 按钮,然后点击“新建”,输入:%MYSQL_HOME%\bin,然后确定。(注意变量值之间用";"隔开)
7.常用配置参数
“—prefix” :设定安装路径,默认为“ /usr/local” ;
“—datadir” :设定MySQL数据文件存放路径;
“—with-charset” :设定系统的默认字符集;
“—with-collation” :系统默认的校验规则;
“—with-extra-charsets” :出了默认字符集之外需要编译安装的字符集;
“—with-unix-socket-path” :设定socket文件地址;
“—with-tcp-port” :指定特定监听端口,默认为3306;
“—with-mysqld-user” :指定运行mysqld的os用户,默认为mysql;
“—without-query-cache” :禁用Query Cache功能;
“—without-innodb” :禁用Innodb存储引擎;
“—with-partition” :在5.1版本中开启partition支持特性;
“—enable-thread-safe-client” :以线程方式编译客户端;
“—with-pthread” :强制使用pthread 线程库编译;
“—with-named-thread-libs” :指定使用某个特定的线程库编译;
“—without-debug” :使用非debug模式;
“—with-mysqld-ldflags” : mysqld的额外link参数;
“—with-client-ldflags” : client的额外link参数;
3、修改root密码的4种方法
方法1:用SET PASSWORD命令
mysql -u root
mysql> SET PASSWORD FOR ‘root’@‘localhost’ = PASSWORD(‘newpass’);
方法2:用mysqladmin
mysqladmin -u root password “newpass”
如果root已经设置过密码,采用如下方法
mysqladmin -u root password oldpass “newpass”
方法3: 用UPDATE直接编辑user表
mysql -u root
mysql> use mysql;
mysql> UPDATE user SET Password = PASSWORD(‘newpass’) WHERE user = ‘root’;
mysql> FLUSH PRIVILEGES;
方法4:丢失root密码
mysqld_safe --skip-grant-tables&
mysql -u root mysql
mysql> UPDATE user SET password=PASSWORD(“new password”) WHERE user=‘root’;
mysql> FLUSH PRIVILEGES;
4、MySQL的备份与还原
MySQL备份和还原,都是利用mysqldump、mysql和source命令来完成的。
1.Win32下MySQL的备份与还原
备份
开始菜单 | 运行 | cmd |利用“cd /Program Files/MySQL/MySQL Server 5.0/bin”命令进入bin文件夹 | 利用“mysqldump -u 用户名 -p databasename >exportfilename”导出数据库到文件,如mysqldump -u root -p voice>voice.sql,然后输入密码即可开始导出。
还原
进入MySQL Command Line Client,输入密码,进入到“mysql>”,输入命令"show databases;",回车,看看有些什么数据库;建立你要还原的数据库,输入"create database voice;",回车;切换到刚建立的数据库,输入"use voice;",回车;导入数据,输入"source voice.sql;",回车,开始导入,再次出现"mysql>"并且没有提示错误即还原成功。
5.Mysql优化
MySQL Query的优化
Query语句的优化思路和原则主要提现在以下几个方面:
1.优化更需要优化的Query;
2.定位优化对象的性能瓶颈;
3.明确的优化目标;
4.从Explain入手;
5.多使用profile;
6.永远用小结果集驱动大的结果集;
7.尽可能在索引中完成排序;
8.只取出自己需要的Columns;
9.仅仅使用最有效的过滤条件;
10.尽可能避免复杂的Join和子查询;
合理设计并利用索引
1)B-Tree索引
一般来说,MySQL中的B-Tree索引的物理文件大多都是以BalanceTree的结构来存储的,也就是所有实际需要的数据都存放于Tree的LeafNode,而且到任何一个LeafNode的最短路径的长度都是完全相同的,所以我们大家都称之为B-Tree索引当然,可能各种数据库(或MySQL的各种存储引擎)在存放自己的B-Tree索引的时候会对存储结构稍作改造。如Innodb存储引擎的B-Tree索引实际使用的存储结构实际上是B+Tree,也就是在B-Tree数据结构的基础上做了很小的改造,在每一个LeafNode上面出了存放索引键的相关信息之外,还存储了指向与该LeafNode相邻的后一个LeafNode的指针信息,这主要是为了加快检索多个相邻LeafNode的效率考虑。
2)Hash索引
Hash索引在MySQL中使用的并不是很多,目前主要是Memory存储引擎使用,而且在Memory存储引擎中将Hash索引作为默认的索引类型。所谓Hash索引,实际上就是通过一定的Hash算法,将需要索引的键值进行Hash运算,然后将得到的Hash值存入一个Hash表中。然后每次需要检索的时候,都会将检索条件进行相同算法的Hash运算,然后再和Hash表中的Hash值进行比较并得出相应的信息。
1.Hash索引仅仅只能满足“=”,“IN”和“<=>”查询,不能使用范围查询;
2.Hash索引无法被利用来避免数据的排序操作;
3.Hash索引不能利用部分索引键查询;
4.Hash索引在任何时候都不能避免表扫面;
5.Hash索引遇到大量Hash值相等的情况后性能并不一定就会比B-Tree索引高;、
ORDER BY,GROUP BY和DISTINCT优化
1)ORDER BY的实现与优化
优化Query语句中的ORDER BY的时候,尽可能利用已有的索引来避免实际的排序计算,可以很大幅度的提升ORDER BY操作的性能。
优化排序:
1.加大max_length_for_sort_data参数的设置;
2.去掉不必要的返回字段;
3.增大sort_buffer_size参数设置;
2)GROUP BY的实现与优化
由于GROUP BY实际上也同样需要进行排序操作,而且与ORDER BY相比,GROUP
BY主要只是多了排序之后的分组操作。当然,如果在分组的时候还使用了其他的一些聚合函数,那么还需要一些聚合函数的计算。所以,在GROUP
BY的实现过程中,与ORDER BY一样也可以利用到索引。
3)DISTINCT的实现与优化
DISTINCT实际上和GROUP BY的操作非常相似,只不过是在GROUP
BY之后的每组中只取出一条记录而已。所以,DISTINCT的实现和GROUP
BY的实现也基本差不多,没有太大的区别。同样可以通过松散索引扫描或者是紧凑索引扫描来实现,当然,在无法仅仅使用索引即能完成DISTINCT的时候,MySQL只能通过临时表来完成。但是,和GROUP
BY有一点差别的是,DISTINCT并不需要进行排序。也就是说,在仅仅只是DISTINCT操作的Query如果无法仅仅利用索引完成操作的时候,MySQL会利用临时表来做一次数据的“缓存”,但是不会对临时表中的数据进行filesort操作。