时间:2021-07-01 10:21:17 帮助过:36人阅读
先完成再完美,先功能再性能。
大胆假设,小心求证。
MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。
MySQL 是一种关联数据库管理系统,将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL 是开源的,所以你不需要支付额外的费用。
MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
MySQL 使用标准的 SQL 数据语言形式。
MySQL 可以允许于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。
MySQL 对 PHP 有很好的支持,PHP 是目前最流行的 Web 开发语言。
MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为 8TB。
MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 Mysql 系统。
完整的 mysql 优化需要很深的功底,大公司甚至有专门的 DBA 写下述内容:
官网下载地址:http://dev.mysql.com/downloads/mysql/
选择对应的 MySQL 版本、操作系统 和 位数,点击 Download(本博文中以版本 5.5.48 为例)
下载地址:
https://downloads.mysql.com/archives/get/file/MySQL-server-5.5.48-1.linux2.6.x86_64.rpm
https://downloads.mysql.com/archives/get/file/MySQL-client-5.5.48-1.linux2.6.x86_64.rpm
第一步:以 root 身份登录,查看 mysql 是否安装。
rpm -qa | grep mysql
第二步:以 root 身份登录,如果 mysql 的版本不是想要的版本。需要把原来的 mysql 卸载。
使用 yum 命令卸载
yum remove mysql mysql-server mysql-libs mysql-common
使用 rpm 命令卸载
rpm -e RPM软件包名(该名字是第一步命令查出来的名字)
rm -rf /var/lib/mysql
rm -f /etc/my.cnf
注意
:使用 yum 命令卸载,因为 yum 命令可以自动删除与 mysql 相关的依赖;如果使用 rpm 命令卸载,则还需要手动去删除和mysql相关的文件。
第三步1:安装 mysql。需要使用 yum 命令安装。在安装 mysql 之前需要安装 mysql 的下载源。需要从 oracle 的官方网站下载。
1)下载 mysql 的源包:
我们是 centos6.8 对应的 rpm 包为:mysql-community-release-el6-5.noarch.rpm
命令:wget http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm
2)安装 mysql 下载源:
yum localinstall mysql-community-release-el6-5.noarch.rpm
3)在线安装社区版的 mysql:
yum install mysql-community-server
或者在线安装收费版本的 mysql:
yum install mysql-server
两种方式均可,建议安装社区版。
第三步2:我们也可以使用 rpm 命令进行安装。
安装 mysql 服务端(注意提示)
安装 mysql 客户端
查看 MySQL 安装时创建的 mysql 用户和 mysql 组
mysqladmin --version
命令。类似 java -version
,如果打出消息,即为安装成功。
mysql 服务的启+停
设置开机自启动 mysql 服务
查看 设置开机自启动 mysql 服务
第四步:启动 mysql。
service mysql start
注意:
第五步:需要给 root 用户设置密码。
/usr/bin/mysqladmin -u root password ‘new-password‘ #为 root 账号设置密码
第六步:登录 mysql。
[root@localhost ~]# mysql -uroot -p
第七步:需要先登录到 mysql,进行远程连接授权。
GRANT ALL PRIVILEGES ON *.* TO ‘myuser‘@‘%‘ IDENTIFIED BY ‘mypassword‘ WITH GRANT OPTION;
注意
:‘myuser‘、‘mypassword‘ 需要替换成实际的用户名和密码。
Mysql 5.5 版本:cp /usr/share/mysql/my-huge.cnf /etc/my.cnf
Mysql 5.6 版本:cp /usr/share/mysql/my-default.cnf /etc/my.cnf
1、查看字符集
mysql> show variables like ‘character%‘; 或者
mysql> show variables like ‘%char%‘;
默认的 数据库 和 服务器都用了 latin1,所以会乱码。
2、修改
下图中的红色字体部分表示要修改的地方
my.cnf 中要修改的代码如下:
[client]
#password = your_password
port = 3306
socket = /var/lib/mysql/mysql.sock
default-character-set=utf8
# The MySQL server
[mysqld]
port = 3306
character_set_server=utf8
character_set_client=utf8
collation-server=utf8_general_ci
socket = /var/lib/mysql/mysql.sock
skip-external-locking
key_buffer_size = 384M
max_allowed_packet = 1M
table_open_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M
# Try number of CPU‘s*2 for thread_concurrency
thread_concurrency = 8
lower_case_table_names=1
max_connections=1000
[mysql]
no-auto-rehash
default-character-set=utf8
3、重启 mysql
service mysql stop
service mysql start
4、重新连接后重新 create databse 并使用新建库,然后再重新建表试试。
5、还是乱码的话就设值 init_connect=‘SET NAMES utf8‘ ##设定连接 mysql 是 UTF8 编码
。
在 linux 下查看安装目录,命令:ps -ef | grep mysql
/var/lib/mysql
和其它数据库相比,MySQL 有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构
上,插件式的存储引擎架构
将查询处理和其它的系统任务以及数据的存储提取相分离。这种架构可以根据业务的需求和实际需要选择合适的存储引擎。
首先,mysql 的查询流程大致是:mysql 客户端通过协议与 mysql 服务器建连接,发送查询语句,先检查查询缓存,如果命中,直接返回结果,否则进行语句解析。
有一系列预处理,比如检查语句是否写正确了,然后是查询优化(比如是否使用索引扫描,如果是一个不可能的条件,则提前终止),生成查询计划,然后查询引擎启动,开始执行查询,从底层存储引擎调用 API 获取数据,最后返回给客户端。怎么存数据、怎么取数据,都与存储引擎有关。
然后,mysql 默认使用的 BTREE 索引,并且一个大方向是,无论怎么折腾 sql,至少在目前来说,mysql 最多只用到表中的一个索引。
mysql 索引结构
检索原理
【初始化介绍】
一颗 b+ 树,浅蓝色的块我们称之为一个磁盘块,可以看到每个磁盘块包含几个数据项(深蓝色所示)和指针(黄色所示),如磁盘块 1 包含数据项 17 和 35,包含指针 P1、P2、P3,P1 表示小于 17 的磁盘块,P2 表示在 17 和 35 之间的磁盘块,P3 表示大于 35 的磁盘块。
真实的数据存在于叶子节点即 3、5、9、10、13、15、28、29、36、60、75、79、90、99。
非叶子节点不存储真实的数据,只存储指引搜索方向的数据项,如 17、35 并不真实存在于数据表中。
【查找过程】
如果要查找数据项 29,那么首先会把磁盘块 1 由磁盘加载到内存,此时发生一次 IO,在内存中用二分查找确定 29 在 17 和 35 之间,锁定磁盘块 1 的 P2 指针,内存时间因为非常短(相比磁盘的 IO)可以忽略不计,通过磁盘块 1 的 P2 指针的磁盘地址把磁盘块 3 由磁盘加载到内存,发生第二次 IO,29 在 26 和 30 之间,锁定磁盘块 3 的 P2 指针,通过指针加载磁盘块 8 到内存,发生第三次 IO,同时内存中做二分查找找到 29,结束查询,总计三次 IO。