一、mysql的架构介绍
1.Mysql简介
Mysql是一个关系型数据库管理系统。
高级Mysql部分:mysql内核,sql优化,各种参数常量设定,主从复制,软硬件升级,容灾备份,sql编程。
2.lLinux安装Mysq
将MySQL-client-5.5.48-1.linux2.6.i386.rpm和MySQL-server-5.5.48-1.linux2.6.i386.rpm复制到opt目录下。
检查Linux是否安装过Mysql
[root@hadoop02 opt]# rpm -qa|grep -i mysql
一般情况下,centos会自带一个libs,使用rpm -e 软件名,进行卸载。
准备软件
MySQL-client-5.6.39-1.el6.x86_64.rpm
MySQL-server-5.6.39-1.el6.x86_64.rpm
MySQL-shared-5.6.39-1.el6.x86_64.rpm
先安装MySQL-shared-5.6.39-1.el6.x86_64.rpm
[root@hadoop02 opt]# rpm -ivh MySQL-shared-5.6.39-1.el6.x86_64.rpm
安装服务端
[root@hadoop02 opt]# rpm -ivh MySQL-server-5.6.39-1.el6.x86_64.rpm
安装客户端
[root@hadoop02 opt]# rpm -ivh MySQL-client-5.6.39-1.el6.x86_64.rpm
检查是否安装成功
[root@hadoop02 opt]# cat /etc/passwd|grep mysql
mysql:x:496:493:MySQL server:/var/lib/mysql:/bin/bash
[root@hadoop02 opt]# mysqladmin --version
mysqladmin Ver 8.42 Distrib 5.5.48, for Linux on i686
检查mysql服务是否启动
[root@hadoop02 opt]# ps -ef | grep mysql
root 3512 3242 0 22:17 pts/0 00:00:00 grep mysql
启动Mysql服务
service mysql start
启动mysql后台服务后,查看如下
[root@hadoop04 opt]# ps -ef|grep mysql
root 4129 1 0 05:16 pts/1 00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/hadoop04.pid
mysql 4225 4129 0 05:16 pts/1 00:00:16 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=hadoop04.err --pid-file=/var/lib/mysql/hadoop04.pid
root 4448 1 0 07:30 pts/1 00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/hadoop04.pid
mysql 4547 4448 10 07:30 pts/1 00:00:02 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=hadoop04.err --pid-file=/var/lib/mysql/hadoop04.pid
root 4559 3920 3 07:31 pts/1 00:00:00 grep mysql
关闭Mysql服务
[root@hadoop04 opt]# service mysql stop
问题1-不能使用密码登录
问题如下:第一次登录Mysql,无论是否输入密码都会出现如下错误。
[root@hadoop04 opt]# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
或者
[root@hadoop04 opt]# mysql
解决办法(给root设置密码)
1、关闭mysql服务
[root@hadoop04 opt]# service mysql stop
2、使用如下命令,跳过密码
[root@hadoop04 opt]# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
3、按Ctrl+C结束上述命令,输入一下命令
[root@hadoop04 opt]# mysql -u root mysql
4、删除数据库mysql表user中多余的host及user
4.1、先查询user表中的好似突然和user,注意sql语句的末尾的;。
mysql> select host,user,password from user;
4.2、根据查出的信息,只保留localhost,其他的host删除
mysql> delete from user where host <> 'localhost';
5、设置新密码
mysql> update user set password =password('123456');
6、让修改生效
mysql> flush privileges;
7、退出,并重新登录mysql
mysql> quit;
[root@hadoop04 opt]# mysql -uroot -p123456
3.mysql开机自启动
[root@hadoop04 opt]# chkconfig mysql on
查看是否开机自启动,看到[*]mysql,表示mysql会开机启动
[root@hadoop04 opt]# ntsysv
4.mysql数据库存放路径
使用如下命令查看,安装的数据库,安装在/var/lib/mysql目录下。
[root@hadoop04 桌面]# cd /var/lib/mysql
[root@hadoop04 mysql]# ls -l
总用量 110772
-rw-rw----. 1 mysql mysql 56 4月 1 05:16 auto.cnf
-rw-rw----. 1 mysql mysql 149556 4月 1 15:45 hadoop04.err
-rw-rw----. 1 mysql mysql 5 4月 1 15:45 hadoop04.pid
-rw-rw----. 1 mysql mysql 12582912 4月 1 15:45 ibdata1
-rw-rw----. 1 mysql mysql 50331648 4月 1 15:45 ib_logfile0
-rw-rw----. 1 mysql mysql 50331648 4月 1 05:14 ib_logfile1
drwx--x--x. 2 mysql mysql 4096 4月 1 05:14 mysql
srwxrwxrwx. 1 mysql mysql 0 4月 1 15:45 mysql.sock
drwx------. 2 mysql mysql 4096 4月 1 05:14 performance_schema
-rw-r--r--. 1 root root 125 4月 1 05:14 RPM_UPGRADE_HISTORY
-rw-r--r--. 1 mysql mysql 125 4月 1 05:14 RPM_UPGRADE_MARKER-LAST
drwxr-xr-x. 2 mysql mysql 4096 4月 1 05:14 test
[root@hadoop04 mysql]#
5.修改mysql的配置文件
进入mysql配置文件目录,查看配置文件
[root@hadoop04 mysql]# cd /usr/share/mysql
[root@hadoop04 mysql]# ls -l
拷贝配置文件my-default.cnf
[root@hadoop04 mysql]# cp my-default.cnf /etc/my.cnf
停止服务,开始服务,进入Mysql
[root@hadoop04 mysql]# mysql stop
[root@hadoop04 mysql]# mysql start
[root@hadoop04 mysql]# mysql -u root -p
问题1-show databases时报错
mysql> show databases;
ERROR 1820 (HY000): You must SET PASSWORD before executing this statement
解决办法
mysql> set password = password('123456');
Query OK, 0 rows affected (0.08 sec)
mysql> show databases;
6.Linux下Mysql基本使用
创建数据库
mysql> create database db01;
使用db01数据库
mysql> use db01;
查看表结构
mysql> show tables;
创建表
mysql> create table user(id int not null,name varchar(20));
插入数据
mysql> insert into user values(1,'z3');
7.修改mysql的字符编码
查看mysql的字符编码
mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.07 sec)
默认的客户端和服务端都用了latin1,所以会出现出入入中文失败或者乱码。
修改我们之前复制到etc目录下的my.cnf配置文件
[root@hadoop04 mysql]# cd /etc/
打开配置文件
vim my.cnf
输入i进入插入模式,修改如下
client]
default-character-set=utf8
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.
[mysqld]
#default-character-set=utf8
character-set-server=utf8
character-set-client=utf8
collation-server=utf8_general_ci
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
[mysql]
no-auto-rehash
default-character-set=utf8
注意,注释以下
#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
按ESC,:wq保存退出。
8.MySql配置文件
MySql的主要配置文件有如下:
- 二进制日志文件log-bin
- 错误日志log-error
- 查询日志log
- 数据文件:frm文件,存放表结构;myd文件,存放表数据;myi文件,存放表索引
9.Mysql的逻辑架构
连接层
最上层是一些客户端和连接服务,包含了本地sock通信和大多数基于客户端、服务端工具实现的类似tcp/ip的通信,主要完成了一些类似连接处理,授权认证等安全方案,在该层引入了线程池的概念
服务层
第二层的架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化以及内部函数的执行,所有跨存储引擎的功能也在这一层实现,如过程,函数等,在该层,服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化如确定查询表的顺序,是否利用索引等,最后完成相应的执行操作,如果是select语句,服务器还会查询内部的缓存,如果缓存空间足够大,这样在解决大量读操作的环境中能够很好的提升性能。
引擎层
存储引擎层,存储引擎真正的负责了MySql中数据的存储和读取,服务器通过API与存储引擎进行通信,不同的存储引擎具有不同的功能,可以根据不同的功能需求选取不同得分引擎,例如MyISAM和InnoDB
存储层
数据存储层,主要将数据存储在运行设备的文件系统上,并完成与存储引擎的交互。