mysql - 2

数据库
关系型数据库(RDBMS):oracle mysql db2 sql server sybase...
优点:容易理解、方便使用、数据一致、读写实时
数据一致:事务
要么全部成功;要么全部失败;
在我们数据库中一个事务是由很多条sql语句组成,要么全部执行成功,要么全部失
败;这样才能保证数据的一致性
168/227
应用场景:1、对数据的一致性要求比较高(银行的交易系统)2、对数据的实时性要求
较高
非关系型数据:【nosql】 Mongdb redis memcahe ..
Mysql数据库的安装:
1、通过二进制包的方式安装
rpm:xxx.el6.x86_64.rpm
glibc:Linux所有版本通用的一个二进制的软件包。也是C的运行库,几乎所有的linux系
统最底层的api接口,都会依赖glibc。
优点:方便安装
缺点:不能自定义
2、源码包安装 xxx.tar.gz
三步曲 (配置编译安装)
优点:灵活,可以自定义
缺点:比较麻烦
3、构建自己的rpm包
优点:根据需求定址自己的rpm包,后续方便安装
缺点:前期的构建时间长,而且麻烦
安装:
1、使用rpm包安装
1)redhat 自己的mysqlrpm包
mysql.x86_64 5.1.71-1.el6
mysql-bench.x86_64 5.1.71-1.el6
mysql-connector-java.noarch 1:5.1.17-6.el6
mysql-connector-odbc.x86_64 5.1.5r1144-7.el6
mysql-devel.i686 5.1.71-1.el6
mysql-devel.x86_64 5.1.71-1.el6
mysql-libs.i686 5.1.71-1.el6
mysql-server.x86_64 5.1.71-1.el6
mysql-test.x86_64 5.1.71-1.el6
php-mysql.x86_64 5.3.3-26.el6
169/227
# rpm -ql mysql-server
/etc/logrotate.d/mysqld 日志轮转文件
/etc/rc.d/init.d/mysqld 启动脚本
/var/lib/mysql mysql的默认数据根目录
/var/log/mysqld.log 日志文件
/var/run/mysqld mysql进程目录
# rpm -ql mysql
/usr/bin/mysql 客户端命令
/usr/bin/mysqladmin
/usr/bin/mysqlbinlog
/usr/bin/mysqlcheck
/usr/bin/mysqldump
/usr/bin/mysqlimport
/usr/bin/mysqlshow
启动服务:
# /etc/rc.d/init.d/mysqld start
# service mysql start
---------------------------------------------------------------------------------------------------------------------
(启动过程:)
Initializing MySQL database: Installing MySQL system tables...
OK
Filling help tables...
OK
------以上2个ok说明数据库初始化完毕
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h node1.uplook.com password 'new-password'
Alternatively you can run:
/usr/bin/mysql_secure_installation
which will also give you the option of removing the test
databases and anonymous user created by default. This is
strongly recommended for production servers.
See the manual for more instructions.
170/227
You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &
You can test the MySQL daemon with mysql-test-run.pl
cd /usr/mysql-test ; perl mysql-test-run.pl
Please report any problems with the /usr/bin/mysqlbug script!
[ OK ]
Starting mysqld: [ OK ]
后续配置:
# /usr/bin/mysql_secure_installation 安全配置
Change the root password? [Y/n] n
... skipping.
Remove anonymous users? [Y/n] n
... skipping.
Disallow root login remotely? [Y/n] n 生产环境中一般是不允许远程访问
... skipping.
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
-------------------------------------------------------------------------------------------------------------------
# netstat -nltp|grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 4739/
mysqld
# mysql -p123-----登录mysql
mysql> show databases 查看当前数据库
-> ;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
+--------------------+
2 rows in set (0.00 sec)
information_schema数据库:对象数据信息库,一般保存的是其他数据库的相关信息;里
171/227
面只有一个只读的表,实际上是一个视图,不是基本表,无法看到任何的相关文件
mysql数据库:核心的库
test库:测试库
-------------------------------------------------------------------------------------------------------------
后续密码设置:
1、直接使用客户端工具设置密码
# mysqladmin -u root password '123' 设置新密码(第一次设置密码)
# mysqladmin -u root password 'newpass' -p123 重新设置密码
# mysqladmin -u root password 'mysql' -p ----(输入passwd)
2、使用sql语句直接更新表信息、
进入mysql:
mysql> update user set password=password(456) where user='root' and
host='localhost';
mysql> flush privileges; 刷新授权表
或者
mysql> flush privileges; 刷新授权表
mysql> set password for 'root'@'localhost'=password('123'); 不需要刷新授权表
3、不知道原来的密码
1)修改配置文件
/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf
(如果以上配置文件有冲突,那么以最后读取到的为主)
vim /etc/my.cnf
[mysqld]
skip-grant-tables 跳过授权表
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security
risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
#pid-file=/var/lib/mysql/mysqld.pid
2)直接在后台安全进程启动mysql
172/227
# /usr/bin/mysqld_safe --skip-grant-tables &
初始化:
# /usr/bin/mysql_install_db --user=mysql --defaults-file=/etc/my.cnf
2、安装mysql AB 官方的rpm包
MySQL-server-5.6.19-1.el6.x86_64.rpm
MySQL-client-5.6.19-1.el6.x86_64.rpm
MySQL-devel-5.6.19-1.el6.x86_64.rpm
MySQL-embedded-5.6.19-1.el6.x86_64.rpm
MySQL-shared-5.6.19-1.el6.x86_64.rpm
MySQL-shared-compat-5.6.19-1.el6.x86_64.rpm
MySQL-test-5.6.19-1.el6.x86_64.rpm
安装前:
# rpm -e mysql-server mysql mysql-libs --nodeps
# rm -rf /var/lib/mysql/*
# cd /var/lib/mysql/
# rpm -ivh MySQL-server-5.6.19-1.el6.x86_64.rpm
# cat ~/.mysql_secret ---------> 初始密码
# mysql_secure_installation
...
安装过程出现的问题解决:
错误提示:找不到/var/lib/mysql/mysql.sock
解决:
# service mysql start 3306监听
注意:pid文件和sock文件是在服务启动后产生的;
错误:
mysql> show databases;
ERROR 1820 (HY000): You must SET PASSWORD before executing this statement
173/227
mysql> set password for 'root'@'localhost'=password('111');
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
performance_schema:数据库是mysql 5.5版本以后有的,收集操作系统性能相关的信息
mysql客户端工具:
-u:指定用户
-S:指定sock文件
-h:指定主机(ip|主机名)
-e:外部执行sql
-P:指定端口
-p:指定密码
# mysql -p (默认是root用户从localhost登录)
# mysql -u xxx -P xxx -p
说明:
-p参数后面跟的密码不能有空格;如果有空格就意味者访问的是参数后面的数据库
# mysql -p 123
Enter password:
ERROR 1049 (42000): Unknown database '123'
# mysql -uroot -e 'show databases;' -p
Enter password:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
174/227
查看:>show databases -----查看数据库的列表
>use information_schema mysql----进入
>show tables
>select *from FILES
作业:
1、安装glibc的mysql;一台主机同时启动多个实例
2、预习源码安装mysql (参照mysql的官方文档)
glibc 安装:
需求:
安装至: /usr/local/mysql24
/usr/local/mysql24/data
步骤:
1、创建用户组
# id mysql
uid=27(mysql) gid=27(mysql) groups=27(mysql)
2、下载mysql5.6.24的软件包,并解压
# tar -xf /soft/mysql-5.6.24-linux-glibc2.5-x86_64.tar.gz -C /soft
3、做软连接,将解压的所有文件连接到mysql的安装目录
# ln -s /soft/mysql-5.6.24-linux-glibc2.5-x86_64 /usr/local/mysql24
4、进入到/usr/local/mysql24目录里
# chown -R mysql.mysql .
5、安装mysql数据库
# scripts/mysql_install_db --user=mysql
目的:在mysql的数据目录里初始化数据文件(/usr/local/mysql24/data)
6、更改mysql安装目录的属主和数据目录的属主
# chown -R root .
# chown -R mysql ./data
175/227
7、后台启动数据库
# bin/mysqld_safe --user=mysql &
问题:启动失败
原因:当前系统中有一个5.6.19的mysql数据库在启动
解决:先停止掉5.6.19的mysql数据库
8、创建mysql24的启动脚本文件
# cp support-files/mysql.server /etc/init.d/mysql24
注意:
修改脚本文件中的(vim /etc/init.d/mysql24)
basedir=/usr/local/mysql24
datadir=/usr/local/mysql24/data
9、用脚本再次测试验证
# /etc/init.d/mysql24---脚本启动
# service mysql24 restart
课堂练习:
数据安装目录:/mysql24
数据目录:/mysql24/data
问题:怎样在同一台服务器上启动实例?
思路:
1、需要给不同的数据库指定不同的端口
2、每个数据库的安装目录和数据目录不同
3、通过修改配置文件来更改端口以及数据目录
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
5.6.19:MySQL ——>/var/lib/mysql——>my.cnf
# vim /var/lib/mysql/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
port=3306
176/227
5.6.24:mysql ——>/usr/local/mysql24——>my.cnf
# vim /usr/local/mysql24/my.cnf
basedir = /usr/local/mysql24
datadir = /usr/local/mysql24/data
port = 3307
socket = /tmp/mysql.sock
# socket =/usr/local/mysql24/mysql.sock
访问:
# mysql -p ——>5.6.19
# mysql -S /var/lib/mysql.sock------通过sock文件访问
# mysql -P3306 -p
# /usr/local/mysql24/bin/mysql ——>5.6.24
# mysql -S /tmp/mysql.sock (-p456)
。。。。。。。。。。。。。。。。。。。。。。。。。。
源码包安装mysql:
1、下载源码包 www.mysql.com
# md5sum mysql-5.6.25.tar.gz
37664399c91021abe070faa700ecd0ed mysql-5.6.25.tar.gz
2、解压并且进入到解压的目录
# tar -xf mysql-5.6.25.tar.gz
# cd mysql-5.6.25
创建mysql用户:
# groupadd mysql
# useradd -r -g mysql -s /bin/false mysql
3、安装三步曲(配置、编译、安装)
需求:
安装目录:/mysql25
数据目录:/mysql25/data
端口:3308
sock:/mysql25/mysql.sock
CMAKE_INSTALL_PREFIX=/mysql25 指定安装基目录
DEFAULT_CHARSET= 默认的字符集
DEFAULT_COLLATION= 字符集的排序
177/227
ENABLED_LOCAL_INFILE= 是否加载外部文件 默认off 1代表开启;0代表关闭
MYSQL_TCP_PORT 端口号
MYSQL_UNIX_ADDR 指定sock文件位置
SYSCONFDIR 系统配置文件所在路径
MYSQL_DATADIR 数据库的数据目录
WITH_EXTRA_CHARSETS 扩展字符集
WITHOUT_xxx_STORAGE_ENGINE 不将存储引擎编译到mysql的静态库里
WITH_xxx_STORAGE_ENGINE 将存储引擎编译到mysql的静态库里
# vim cmake.sh
---> cmake . \
-DCMAvimKE_INSTALL_PREFIX=/mysql25 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_DATADIR=/mysql25/data \
-DSYSCONFDIR=/mysql25/ \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \ 支持分区
-DMYSQL_UNIX_ADDR=/mysql25/mysql.socket \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3308
# chmod o+x cmake.sh
【或者# cmake . -DCMAKE_INSTALL_PREFIX=/mysql25 -
DENABLED_LOCAL_INFILE=1...】
准备工作:
# yum -y install cmake
# mkdir /mysql25
# chown -R mysql. /mysql25
错误提示:
-- Could NOT find Curses (missing: CURSES_LIBRARY CURSES_INCLUDE_PATH)
CMake Error at cmake/readline.cmake:85 (MESSAGE):
Curses library not found. Please install appropriate package,
解决:安装所需要的软件包:
# yum -y install ncurses-devel
# rm -f CMakeCache.txt
178/227
# bash cmake.sh
# make
# make install
# scripts/mysql_install_db --user=mysql----初始化数据库
建mysql25的启动脚本文件
# cp support-files/mysql.server /etc/init.d/mysql25
注意:
修改脚本文件中的(vim /etc/init.d/mysql25)
basedir=/usr/local/mysql25
datadir=/usr/local/mysql25/data
9、用脚本再次测试验证
# /etc/init.d/mysql25---脚本启动
# service mysql25 restart
初始化:
登录:
# export PATH=$PATH:/usr/local/mysql25/bin
# /usr/local/mysql25/bin/mysql------进入mysql
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
字符集和字符编码:
字符:所有符号的总称
字符集:
unicode(统一字符集):
ASCII:
GB2312:中文字符集
GBK:gb2312的扩展字符集
GB18030:gbk的超级字符集,包含中、日、韩三个国家的字符集
字符编码:
UTF-8 UTF-16 UCS-2 UCS-4
GBK/GB2312
GB18030
179/227
字符编码每个字符字节数
ASCCii 1
UTF-8(UNICODE) 1-6
UTF-16 2-4
GBK/GB2312 1-2
GB18030 1-4
错误提示:
CMake Error at /usr/share/cmake/Modules/CMakeCXXInformation.cmake:17
(GET_FILENAME_COMPONENT):
get_filename_component called with incorrect number of arguments
Call Stack (most recent call first):
CMakeLists.txt:3 (PROJECT)
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
CMake Error: Internal CMake error, TryCompile configure of cmake failed
-- Performing Test HAVE_PEERCRED - Failed
解决:
yum -y install gcc-*
/soft/mysql-5.6.25/sql/sql_planner.cc: In member function ‘void
Optimize_table_order::best_access_path(JOIN_TAB*, table_map, uint, bool,
double, POSITION*, POSITION*)’:
/soft/mysql-5.6.25/sql/sql_planner.cc:431: warning:
‘loose_scan_opt.Loose_scan_opt::best_loose_scan_start_key’ may be used
uninitialized in this functio
Starting MySQL..The server quit without updating PID file (/mysql25/data/
zy.uplooking.com.pid).
##################################################
Mysql 体系结构:
连接者:不同语言的代码程序和mysql的交互(SQL交互)
180/227
1、连接池 --------------- 管理、缓冲用户的连接,线程处理等需要缓存的需求
2、管理服务和工具组件
3、sql接口 --------------接受用户的SQL命令,并且返回用户需要查询的结果
4、查询解析器 ----------SQL命令传递到解析器的时候会被解析器验证和解析(权限、语法结
构)
5、优化器 ---------------SQL语句在查询之前会使用查询优化器对查询进行优化
6、缓存 -------------------如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中
取数据
7、插入式存储引擎------
存储引擎说白了就是如何管理操作数据(存储数据、如何更新、查询数据等)的一种
方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型
(即存储和操作此表的类型)
在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样
的。而MySql数据库提供了多种存储引擎。
用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己
的存储引擎。甚至一个库中不同的表使用不同的存储引擎,这些都是允许的。
MySQL常用的存储引擎:
MyISAM存储引擎:
由于该存储引擎不支持事务、也不支持外键,所以访问速度较快。因此当对事务完整性
没有要求并以访问为主的应用适合使用该存储引擎。
InnoDB存储引擎 :( mysql 5.5版本以后默认的存储引擎)
由于该存储引擎在事务上具有优势,即支持具有提交、回滚及崩溃恢复能力等事务特
性,所以比MyISAM存储引擎占用更多的磁盘空间。
因此当需要频繁的更新、删除操作,同时还对事务的完整性要求较高,需要实现并发控制,建
议选择。
MEMORY:
MEMORY存储引擎存储数据的位置是内存,因此访问速度最快,但是安全上没有保障。
适合于需要快速的访问或临时表。
BLACKHOLE:
黑洞存储引擎,写入的任何数据都会消失,可以应用于主备复制中的分发主库。
8、物理文件:
日志文件,数据文件,配置文件,pid文件,socket文
posted @ 2018-06-25 22:58  Sky-wings  阅读(117)  评论(0编辑  收藏  举报