一、MySQL数据库简介
MySQL是一款深受欢迎的开源领域重要的关系型数据库产品,后被oracle收购。
MySQL是一种关系型数据库管理系统,关系型数据库的特点是将数据保存在不同的表中,再将这些表放入不同的数据库中,而不是将所有的数据统一放在一个大仓库里,这样的设计增加了MySQL的读取速度,灵活性和可管理性也得到了很大的提高。访问以及管理MySQL数据库的最常用的标准化语言为SQL结构化查询语句。
- MySQL优点
绝大多数的使用linux操作系统的大中小互联网公司网站都在用MySQL作为其后端的数据库存储库,是因为MySQL数据库有以下几个特点:
1.MySQL性能好,服务稳定,很少出现宕机
2.MySQL开放源代码且无版权制约,自主性及使用成本低
3.MySQL历史悠久,社区以及用户非常活跃,遇到问题,可以寻求帮助
4.MySQL软件体积小,安装简单并且易于维护
5.MySQL可以用LAMP,LEMP流行架构
6.MySQL支持多种操作系统,提供API接口,支持多种开发语言,对php语言有很好的支持
##二、 MySQL数据库分类与版本升级
MySQL数据库官方网站,其发布的MySQL版本采用双授权政策,和大多数开源的路线一样,分为社区版和商业版,而这两个版本又各自分四个版本依次发布。这四个版本为:Alpha版、Beta版、RC版和GA版。
- 2.1MySQL数据库四种发布版本介绍
Alpha版
Alpha版一般只在开发的公司内部运行,不对外公开。主要是开发者对自己的产品进行测试,检查产品是否有缺陷、错误等
Beta版
Beta版一般是完成功能的开发和所有测试工作之后的产品,不会存在较大的功能金和性能bug,并且邀请用户体验和测试,以便全面了解测试软件的不足之处。
RC版
RC版属于生产环境之前的一个小版本,是根据Beta版本测试结果,并修复收集到的bug或缺陷之后的产品
GA版
GA版本是软件产品的正式发布版本,也称生产版本产品。一般情况下企业生产环境都会选择GA版本。 - 2.2MySQL数据库产品线
第一条是5.0.xx以及升级到5.1.xx的产品系列。这条产品线继续完善和改进其用户体验和性能,这是早期的产品线。yum安装就是用这条产品线。
第二条产品线是5.4.xx开始到5.7.xx产品线系列。增加了新的算法和开发了新的存储引擎。大部分用5.5
第三条产品线是6.0.xx到7.xx.xx产品系列,主要是为了更好的推广MySQL Cluster版本,以及提高MySQL集群的性能和稳定性
三、安装MySQL
MySQL有三种安装方式:第一种yum/rpm方式安装mysql,
第二种常规编译安装MySQL(./configure;make;make install),MySQL5.5.xx-5.6.xx产品系列比较特殊编译安装方式不同,采用cmake或gmake方式编译安装(./cmake;make;make install) 第三种方法采用二进制免编译安装MySQL,适合各类MySQL产品。直接下载软件包,初始化即可完成MySQL的安装和启动。
MySQL的获取方式
软件包尽量去官方网站下载
官方下载地址:https://dev.mysql.com/downloads/mysql/5.5.html#downloads 不同的安装方式下载不同的包
Linux-Generic 代表的是二进制包
编译安装的话下载Source Code,表示源码包,而二进制安装方式,就是将下载的二进制包解压后,即可
- 3.1 采用二进制免编译的方式安装MySQL
这里选择mysql-5.5.62这个版本的二进制包,先从官网下载相应的包。如下图所示。
把mysql-5.5.62-linux-glibc2.12-x86_64.tar.gz上传到/home/tools目录下。
mkdir -p /home/tools
cd /home/tools
yum -y install lrzsz#下载传输工具
rz -y #选择mysql-5.5.62-linux-glibc2.12-x86_64.tar.gz上传
tar -xzv -f mysql-5.5.62-linux-glibc2.12-x86_64.tar.gz #解压
# ls
mysql-5.5.62-linux-glibc2.12-x86_64#解压后包名
mysql-5.5.62-linux-glibc2.12-x86_64.tar.gz
创建虚拟用户管理mysql
useradd -s /sbin/nologin -M mysql
id mysql
uid=500(mysql) gid=500(mysql) groups=500(mysql)
把解压后的mysql包移动到安装目录下(也可以不移动直接安装个人习惯把安装目录与软件包目录分开,便于管理)
mkdir -p /home/application
mv mysql-5.5.62-linux-glibc2.12-x86_64 /home/application/#这一步就相当于编译安装的./configure
做个软连接不显示版本号
ln -s /home/application/mysql-5.5.62-linux-glibc2.12-x86_64/ /home/application/mysql#软连接
# ll
total 4
lrwxrwxrwx 1 root root 54 Jun 18 12:15 mysql -> /home/application/mysql-5.5.62-linux-glibc2.12-x86_64/
drwxr-xr-x 13 root root 4096 Jun 18 12:04 mysql-5.5.62-linux-glibc2.12-x86_64
初始化数据库
/home/application/mysql/scripts/mysql_install_db --basedir=/home/application/mysql/ --datadir=/home/application/mysql/data/ --user=mysql
#basedir指定mysql安装目录,datadir数据存放目录,user指定用户
设置mysql目录权限
chown -R mysql.mysql /home/application/mysql
ll#查看一下
total 4
lrwxrwxrwx 1 mysql mysql 54 Jun 18 12:15 mysql -> /home/application/mysql-5.5.62-linux-glibc2.12-x86_64/
生成mysql配置文件
Linux中MySQL配置文件my.cnf参数如何优化参考文章
ll /home/application/mysql/support-files/*.cnf#mysql配置文件位置
-rw-r--r-- 1 7161 31415 4691 Aug 29 2018 /home/application/mysql/support-files/my-huge.cnf
-rw-r--r-- 1 7161 31415 19759 Aug 29 2018 /home/application/mysql/support-files/my-innodb-heavy-4G.cnf
-rw-r--r-- 1 7161 31415 4665 Aug 29 2018 /home/application/mysql/support-files/my-large.cnf
-rw-r--r-- 1 7161 31415 4676 Aug 29 2018 /home/application/mysql/support-files/my-medium.cnf
-rw-r--r-- 1 7161 31415 2840 Aug 29 2018 /home/application/mysql/support-files/my-small.cnf
#这些配置根据硬件选择,这里选择my-small.cnf
cp /home/application/mysql/support-files/my-small.cnf /etc/my.cnf
#把配置文件my-small.cnf复制到mysql默认配置文件 /etc/my.cnf中
更改启动脚本的安装目录
/home/application/mysql/bin/mysqld_safe
#mysql启动脚本位置,因为是二进制安装位置是默认的/usr/local/mysql,要替换成现在选择的安装目录
sed -i 's#/usr/local/mysql#/home/application/mysql#g' /home/application/mysql/bin/mysqld_safe
启动mysql
/home/application/mysql/bin/mysqld_safe &#后台运行
lsof -i:3306#查看
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 2318 mysql 10u IPv4 20171 0t0 TCP *:mysql (LISTEN)
配置环境变量
mysql的命令都在 /home/application/mysql/bin/这个目录下,为了不每次都带上绝对路径执行所以要配置mysql命令环境变量。mysql命令路径要放在$PATH前面,以免出错。
echo 'PATH=/home/application/mysql/bin/:$PATH' >>/etc/profile #将mysql命令路径添加到环境变量配置文件
tail -1 /etc/profile #查看添加结果
source /etc/profile # 有结果了,执行这一步让环境变量生效
echo $PATH #不放心可以再检查一下生效了没有
mysql #这样就可以直接登陆了
还有一种方法是把mysql命令复制到已经有环境变量的目录里
echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
cp /home/application/mysql/bin/* /usr/local/bin/ #复制命令所在目录内容到 /usr/local/bin/
这样mysql就已经安装完成了,默认的登陆是没有密码。
优化mysql的启动方式实现开机自启动
cp /home/application/mysql/support-files/mysql.server /etc/init.d/mysqld
#把mysql.server启动脚本复制到/etc/init.d/目录下并改名为mysqld
sed -i 's#/usr/local/mysql#/home/application/mysql#g' /etc/init.d/mysqld
#替换默认配置文件中的安装目录
chmod +x /etc/init.d/mysqld #增加可执行权限
killall mysqld #结束mysql进程
lsof -i:3306 #查看是否杀掉进程
/etc/init.d/mysqld start #启动mysql
/etc/init.d/mysqld restart #重启MySQL
/etc/init.d/mysqld stop #停止mysql
chkconfig mysqld on #设置开机自启动
chkconfig --list mysqld #查看
设置及更改密码
mysqladmin -u root password "123456" #刚开始安装完mysql是没有密码的,这里设置登录密码为123456
mysql -u root -p123456 #用密码登录mysql
quit #退出mysql
mysqladmin -uroot -p123456 password "mysql" #更改密码,将原密码123456改为mysql
- 3.2采用源码编译方式安装mysql
进入MySQL官网选择mysql-5.5.62.tar.gz源码包下载,选择方法如下图:
安装相关软件包
编译安装中需要注意的是 5.5之前的编译方式是:./configure make && make install 而5.5之后则使用:cmake。安装cmake可以yum安装也可以编译安装。yum安装简单,执行下面两个命令即可。
yum list cmake | grep cmake #查看yum安装的版本
yum -y install cmake #开始安装
这里选择编译安装cmake
yum install -y gcc gcc-c++ #一会编译需要gcc
mkdir -p /home/tools
cd /home/tools
wget https://cmake.org/files/v2.6/cmake-2.6.3.tar.gz #下载cmake
tar -xzv -f cmake-2.6.3.tar.gz #解压cmake
cd cmake-2.6.3
./configure
# -- Build files have been written to: /home/tools/cmake-2.6.3
# CMake has bootstrapped. Now run gmake.提示你用gmake
gmake
gmake install
安装 ncurses-devel libaio-devel 包
yum install -y ncurses-devel libaio-devel
创建管理用户mysql管理mysql
groupadd mysql
useradd mysql -s /sbin/nologin -M -g mysql
编译安装mysql
tar -xzv -f mysql-5.5.62.tar.gz #解压mysql源码安装包
cd mysql-5.5.62 #进入mysql目录然后运行cmake
进行cmake安装
cmake安装过程做了什么呢?
定制功能:存储引擎、字符集、压缩等
定制安装位置、数据存放位置、文件位置
cmake . -LH or ccmake . #查看参数
cmake -DCMAKE_INSTALL_PREFIX=/home/application/mysql-5.5.62 \ #mysql安装目录
-DMYSQL_DATADIR=/home/application/mysql-5.5.62/data \ #mysql数据存放目录
-DMYSQL_UNIX_ADDR=/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
做一个软连接出掉版本号
ln -s /home/application/mysql-5.5.62/ /home/application/mysql
选择配置文件
ll /home/application/mysql/support-files/
total 96
-rwxr-xr-x 1 root root 1153 Jun 19 12:04 binary-configure
-rw-r--r-- 1 root root 4528 Jun 19 12:04 config.huge.ini
-rw-r--r-- 1 root root 2382 Jun 19 12:04 config.medium.ini
-rw-r--r-- 1 root root 1626 Jun 19 12:04 config.small.ini
-rw-r--r-- 1 root root 773 Aug 29 2018 magic
-rw-r--r-- 1 root root 4779 Jun 19 12:04 my-huge.cnf
-rw-r--r-- 1 root root 19819 Jun 19 12:04 my-innodb-heavy-4G.cnf
-rw-r--r-- 1 root root 4753 Jun 19 12:04 my-large.cnf
-rw-r--r-- 1 root root 4764 Jun 19 12:04 my-medium.cnf
-rw-r--r-- 1 root root 2928 Jun 19 12:04 my-small.cnf #选择这个较小的配置文件
-rwxr-xr-x 1 root root 1061 Jun 19 12:04 mysqld_multi.server
-rwxr-xr-x 1 root root 909 Jun 19 12:04 mysql-log-rotate
-rwxr-xr-x 1 root root 10649 Jun 19 12:04 mysql.server
-rw-r--r-- 1 root root 1326 Jun 19 12:04 ndb-config-2-node.ini
cp /home/application/mysql/support-files/my-small.cnf /etc/my.cnf #复制配置文件
初始化及配置数据库
主要是指定mysql的管理用户,程序路径,数据存储路径,如果不设置管理用户为mysql会导致启动报错
/home/application/mysql/scripts/mysql_install_db --basedir=/home/application/mysql/ --datadir=/home/application/mysql/data --user=mysql
#--basedir指定安装目录,datadir指定数据存放目录 --user 指定用户
设置mysql目录权限
chown -R mysql.mysql /home/application/mysql/
chmod -R 1777 /tmp/
启动mysql
/home/application/mysql/bin/mysqld_safe & # 这里报了一个错
mysqld_safe Directory '/home/application/mysql-5.5.62/tmp' for UNIX socket file don't exists.
#提示文件/home/application/mysql-5.5.62/tmp不存在
解决办法
vim /etc/my.cnf
#将socket = /home/application/mysql-5.5.62/tmp/mysql.sock 改为
socket =/tmp/mysql.sock
设置命令环境变量
mysql的命令都在 /home/application/mysql/bin/这个目录下,为了不每次都带上绝对路径执行所以要配置mysql命令环境变量。mysql命令路径要放在$PATH前面,以免出错。
echo 'PATH=/home/application/mysql/bin/:$PATH' >>/etc/profile #将mysql命令路径添加到环境变量配置文件
tail -1 /etc/profile #查看添加结果
source /etc/profile # 有结果了,执行这一步让环境变量生效
echo $PATH #不放心可以再检查一下生效了没有
mysql #这样就可以直接登陆了
优化mysql启动方式
cp /home/application/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod u+x /etc/init.d/mysqld
/etc/init.d/mysqld status
/etc/init.d/mysqld restart
/etc/init.d/mysqld stop
chkconfig --add mysqld
chkconfig mysqld on
设置及更改密码
mysqladmin -u root password "123456" #刚开始安装完mysql是没有密码的,这里设置登录密码为123456
mysql -u root -p123456 #用密码登录mysql
quit #退出mysql
mysqladmin -uroot -p123456 password "mysql" #更改密码,将原密码123456改为mysql
update mysql.user set passwd=password(123456) where user='root' and host='localhost' #登录mysql数据库后改密码方式
flush privileges #刷新生效
- 3.3 yum安装mysql
我们通过命令:yum list | grep mysql来查看yum上提供的数据库可下载版本
64位系统 选择安装 mysql.x86_64 mysql-server.x86_64 mysql-devel.x86_64
yum -y install mysql.x86_64 mysql-server.x86_64 mysql-devel.x86_64
service mysqld start #启动mysql
设置密码方法同上。
- 3.4通过rpm安装mysql
去官网下载相应的rpm包:https://dev.mysql.com/downloads/mysql/, 按下图所示,选择MySQL-5.5.62-1.el6.x86_64.rpm-bundle.tar
解压
tar -xf MySQL-5.5.62-1.el6.x86_64.rpm-bundle.tar
然后按照以下顺序进行安装,因为它们之间存在依赖关系
common --> libs --> clients --> server
四、MySQL密码丢失找回方法
- 首先停止mysql数据库
/etc/int.d/mysqld stop
使用–skip-grant-tables启动MySQL,忽略授权登录认证
mysqld_safe --skip-grant-tables --user=mysql &
mysql -u root -p #登录mysql,此时密码为空
update mysql.user set passwd=password(‘’123456‘’) where user='root' and host='localhost' #使用update改
flush privileges #刷新生效