第1章 MySQL简介及部署
1.1 介绍
1.1.1 什么是数据
数据是指对客观事件进行记录并可以鉴别的符号,是对客观事物的性质、状态以及相互关系等进行记载的物理符号或这些物理符号的组合。它是可识别的、抽象的符号。
1.1.2 数据库管理系统种类---关系型
优点:
强大的查询功能
强一致性
二级索引
RDBMS:Oracle、MySQL、mssql(SQL Server)、PG(postgresql)
适用场景:数据安全性要求较高的应用场景
1.1.3 数据库管理系统种类---非关系型
优点:
灵活模式
扩展性
性能
NoSQL:redis、mongodb、memcache、Hbase、neo4j
适用场景:针对性能要求较高,数据安全性要求不是太高的场景,一般是配合RDBMS使用的产品
1.2 MySQL部署
1.2.1 安装方式
1、 rpm或yum安装:安装方便、安装速度快、无法定制
2、 二进制:不需要安装,解压即可使用,不能定制功能
3、 编译安装:可定制,安装速度慢 (5.5版本之前:./configure make make install | 5.5之后:cmake gmake)
1.2.2 编译安装
1.2.3 安装环境准备
系统版本:Linux Centos-6.9 2.6.32-696.23.1.el6.x86_64
MySQL软件版本:5.6.38
IP地址与主机名:10.0.0.51 db01
1.2.4 MySQL软件包获取方式
https://downloads.mysql.com/archives/community/ #官网下载
1.2.5 开始安装
(1) 安装依赖包:
yum install -y ncurses-devel libaio-devel gcc-c++ gcc ncurses-devel freeglut-devel
(2) 安装cmake
yum install -y cmake
(3) 创建mysql用户,用来管理mysql
useradd -s /sbin/nologin -M mysql
(4) 解压软件包
tar xf mysql-5.6.38.tar.gz
(5) 开始编译安装
cd mysql-5.6.38 #<====进入解压后的目录
cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.38 \
-DMYSQL_DATADIR=/application/mysql-5.6.38/data \
-DMYSQL_UNIX_ADDR=/application/mysql-5.6.38/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_ZLIB=bundled \
-DWITH_SSL=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_DEBUG=0
make && make install #<======编译安装
#===================================
Cmake 做了什么?
1、做了些预配置
2、影响了编译后的程序(编译过程会将cmake指定的配置信息硬编码到程序文件中)
mysqld
mysql
mysql_install_db
mysqldump
mysqladmin
mysqld_safe
等。
#=====================================
ln -s /application/mysql-5.6.38/ /application/mysql #<====创建安装目录的软链接
cp support-files/my*.cnf /etc/my.cnf #<===复制my.conf到etc目录下
#==================
/application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data --user=mysql #<=====初始化数据库
#==================
chown -R mysql.mysql /application/mysql/ #<====修改软件路径归属
cp support-files/mysql.server /etc/init.d/mysqld #<===拷贝启动脚本到Sys-v模式目录
chmod 700 /etc/init.d/mysqld
/etc/init.d/mysqld start #<======启动数据库
netstat -lntup|grep 3306 #<======检查服务端口号
echo 'PATH=/application/mysql/bin/:$PATH' >>/etc/profile #<=====添加环境变量
source /etc/profile
mysql #【回车】#启动mysql数据库,首次启动没有密码
++++++++++++++++++++++++++++++拓展部分+++++++++++++++++++++++++++++++++++++
1.例如你的 root用户现在没有密码,你希望的密码修改为123456,那么命令是:
mysqladmin -u root password 123456
2.如果你的root现在有密码了(123456),那么修改密码为abcdef的命令是:
mysqladmin -u root -p password abcdef
注意,命令回车后会问你旧密码,输入旧密码123456之后命令完成,密码修改成功。
3.如果你的root现在有密码了(123456),那么修改密码为abcdef的命令是:
mysqladmin -u root -p123456 password abcdef (注意-p 不要和后面的密码分
开写,要写在一起,不然会出错,错误如下所示)
4.使用phpmyadmin,这是最简单的了,修改mysql库的user表,
不过别忘了使用PASSWORD函数。
忘记密码:
下面我们提供了6种不同的修改mysql root用户的密码,与增加mysql用户的方法。
方法一
使用phpmyadmin,这是最简单的了,修改mysql库的user表,
不过别忘了使用PASSWORD函数。
方法二
使用mysqladmin,这是前面声明的一个特例。
mysqladmin -u root -p password mypasswd
输入这个命令后,需要输入root的原密码,然后root的密码将改为mypasswd。
把命令里的root改为你的用户名,你就可以改你自己的密码了。
当然如果你的mysqladmin连接不上mysql server,或者你没有办法执行mysqladmin,
那么这种方法就是无效的。
而且mysqladmin无法把密码清空。
下面的方法都在mysql提示符下使用,且必须有mysql的root权限:
方法三
mysql> INSERT INTO mysql.user (Host,User,Password)
VALUES('%','jeffrey',PASSWORD('biscuit'));
mysql> FLUSH PRIVILEGES
确切地说这是在增加一个用户,用户名为jeffrey,密码为biscuit。
在《mysql中文参考手册》里有这个例子,所以我也就写出来了。
注意要使用PASSWORD函数,然后还要使用FLUSH PRIVILEGES。
方法四
和方法三一样,只是使用了REPLACE语句
mysql> REPLACE INTO mysql.user (Host,User,Password)
VALUES('%','jeffrey',PASSWORD('biscuit'));
mysql> FLUSH PRIVILEGES
方法五
使用SET PASSWORD语句,
mysql> SET PASSWORD FOR jeffrey@"%" = PASSWORD('biscuit');
拟也必须使用PASSWORD()函数,
但是不需要使用FLUSH PRIVILEGES。
方法六
使用GRANT ... IDENTIFIED BY语句
mysql> GRANT USAGE ON *.* TO jeffrey@"%" IDENTIFIED BY 'biscuit';
这里PASSWORD()函数是不必要的,也不需要使用FLUSH PRIVILEGES。
注意: PASSWORD() [不是]以在Unix口令加密的同样方法施行口令加密。
MySQL 忘记口令的解决办法
如果 MySQL 正在运行,首先杀之: killall -TERM mysqld。
启动 MySQL :bin/safe_mysqld --skip-grant-tables &
就可以不需要密码就进入 MySQL 了。
然后就是
>use mysql
>update user set password=password("new_pass") where user="root";
>flush privileges;
重新杀 MySQL ,用正常方法启动 MySQL 。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++