MySQL入门教程(2)MySQL 5.7介绍与部署安装教程

Tanglu MySQL 2022-12-06 13819 0

一、MySQL发行版与版本区别

1、主要发行版区别

· Oracle MySQL:官方正统版本,MySQL被Oracle收购后就分为了社区版和企业版,社区版可免费使用,是目前使用最多的发行版。产品迭代速度很快,几乎每三个月就会发行一个小版本。该发行版使用MGR实现集群。

· Percona:在MySQL官方社区版的基础上做了性能优化,是最接近MySQL企业版的发行版,提供了一些MySQL管理工具。由于其属于二次开发,在版本上可能会稍落后官方版。该发行版使用MGR或PXC实现集群。

· MariaDB:MySQL原作者在MySQL被收购后所开发的新的发行版,基本兼容MySQL,也存在版本稍微落后的问题。该发行版使用Galera Cluster实现集群。


2、版本区别



mysql5.5
mysql5.6mysql5.7
索引全局读写锁,并发一般    全局读写锁,并发一般
锁优化,并发性能提升
数据一致性半同步半同步无损复制
多线程复制不支持基于库的多线程复制基于组提交的多线程复制
事务组提交不支持支持支持
半结构化数据    BLOBBLOBJSON

如果没有使用到MySQL,建议采用5.7版本。它除了增强InnoDB性能,还支持在线修改buffer_pool、多源复制、MGR等重要特性


二、MySQL安装前的优化工作

· 关闭CPU节能模式

· 关闭NUMA和SWAP

· 尽可能的选择更好的I/O设备,如SSD,并做好磁盘隔离

· 关闭大页hugepage,hugepage经过测试不能提升数据库性能,反而容易因为额外的内存消耗提升OOM可能性

· 文件系统采用XFS

· 磁盘IO策略调整为deadline(机械盘)或者noop(SSD)。Linux支持四种I/O调度算法,分别是 NONE、NOOP、CFQ 以及 DeadLine。NONE常用在虚拟机中,表示完全不使用任何I/O调度器,完全由物理机负责;NOOP是最简单的I/O调度算法,按照先入先出的顺序进行处理,常用于SSD磁盘;CFQ(Completely Fair Scheduler)也被称为完全公平调度器,是现在很多发行版的默认 I/O 调度器,为每个进程维护了一个I/O调度队列,并按照时间片来均匀分布每个进程的 I/O 请求,支持进程I/O的优先级调度,适用于运行大量进程的系统,像是桌面环境、多媒体应用等;DeadLine调度算法多用在I/O压力比较重的场景,比如数据库。它为读、写请求创建不同的 I/O 队列,可以提高磁盘吞吐量,并确保达到最终期限(deadline)的请求被优先处理


三、MySQL安装方法

在下载MySQL时根据安装包的不同可以分为RPM包安装、源码编译安装和通用二进制包安装3种方式。这三种安装包在命名上有着不同:RPM包通常命名为mysql57-community-release-el7-9.noarch.rpm(也可以选择bundle包,该包将MySQL所有包都整合放在了一起);二进制包归类为Generic类别下,包名通常为mysql-5.7.16-linux-glibc2.5-x86_64.tar;源码包归类为Source分类,包名通常为mysql-5.7.16.tar.gz


· 通过yum安装MySQL(最简单,但无法自定义参数,不建议使用)

1、在官方选择Red Hat Enterprise Linux / Oracle Linux时可以看到一个Yum Repository的下载链接,进入该链接后会显示对应系统版本的rpm文件,这些rpm文件并不是MySQL的安装包,而是Yum仓库。下载对应版本的rpm文件并安装到系统中就会生成一个包含MySQL程序的Yum仓库,剩下的就是使用yum命令直接安装了(记得Server和Client都要装上

mysql571.png


2、安装完成后通过systemctl管理服务。第一次启动系统会初始化生成数据库的相关文件到/var/lib/mysql目录中

yum install mysql mysql-server
systemctl enable mysqld
systemctl start mysqld


3、登录数据库测试是否正常,MySQL 5.7开始无法使用空密码登录,临时密码存放在日志文件中

grep 'password' /var/log/mysqld.log
mysql -uroot -p 'kjgug512525'


· 二进制预编译安装MySQL(推荐方式,也是最常用的方式,能通过配置文件来指定数据库参数)

1、创建MySQL用户和组,并将通用二进制安装包解压到需要的路径下

useradd -r -s /sbin/nologin -M mysql
cd /usr/local/
tar zxvf mysql-5.7.16-linux-glibc2.5-x86_64.tar.gz  #将二进制包解压到/usr/local目录下
ln -s mysql-5.7.16-linux-glibc2.5-x86_64  mysql  #创建软连接方便管理


2、创建用于存放MySQL数据和日志的目录,如有需要还可以为慢日志、错误日志都建立各自的目录。创建好目录后需要将目录属主修改为MySQL用户

mkdir /mysql/{data,log}
chown -R mysql.mysql /mysql


3、创建MySQL主配置文件(可以复制support-files/my-default.cnf文件作为模板)

#方法1:初始化的时候在命令行写好相关参数(不建议)
bin/mysqld --initialize --user=mysql  --basedir=/usr/local/mysql  --datadir=/mysql/data

#方法2:将初始化参数写在配置文件中,然后读取配置文件进行初始化(初始化失败的话通常和配置参数错误有关系)
vi /etc/my3306.cnf
[mysqld]
basedir = /usr/local/mysql
datadir = /mysql/data
log-error = /mysql/log/error.log
character-set-server = utf8
socket = /tmp/mysql.sock
[client]  #客户端连接mysql时使用的配置信息
socket = /tmp/mysql.sock


4、初始化MySQL

MySQL 5.7开始使用bin/mysqld脚本进行初始化(5.7之前是bin/mysql_install_db)。初始化完成后在DATADIR下会创建MySQL的4个默认数据库和相关文件。要重新初始化的话需要先停止服务并删掉数据目录下的所有文件才可以。如果初始化失败可以查看错误日志检查原因,在没配置错误日志时,错误日志默认会在databasedir以主机名为名,如server1.err。如果发现启动后参数和配置的my.cnf存在差异,需要检查下是否在其它路径存在my.cnf覆盖了/etc/my.cnf的配置

#运行初始化命令指定配置文件路径,该选项必须放在第一个参数中,如果不写的话MySQL会按照几个默认路径按顺序寻找my.cnf这样命名的配置文件
mysqld --defaults-file=/etc/my3306.cnf  --initialize --user=mysql
#mysqld --defaults-file=/etc/my3306.cnf  --initialize-insecure --user=mysql  #初始化不创建初始密码



5、使用mysqld_safe脚本来启动服务,相比使用mysqld启动,它会多运行一个监控进程,当mysql服务异常退出时会自动拉起

/usr/local/mysql/bin/mysqld_safe  --defaults-file=/etc/my3306.cnf &  #指定配置文件启动服务


6、在错误日志中记录了一个root临时密码(5.6是空密码),使用该密码运行bin/mysql_secure_installation脚本可以进行一些安全相关配置,或者登陆到MySQL后修改root的密码,否则无法进行其他操作。

alter user root@'localhost' identified by 'Newp@ssword'


如初始化完成后使用临时密码提示Your password has expired密码过期,是因为系统自带的mysql命令行工具与当前安装的MySQL版本不一致,使用绝对路径即可。

mysql572.png


7、修改配置后有两种方式来重启MySQL。一个是通过客户端关闭MySQL然后再启动

#方法1:用命令行直接关闭再启动服务
mysqladmin -uroot -p123456 -S /tmp/mysql.sock shutdown
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
#方法2:拷贝二进制包中的启动脚本进行服务管理,虽然这操作方式是按照CentOS6来的,但是在7也是向下兼容的)
cp support-files/mysql-server /etc/init.d/mysqld
chmod a+x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
service mysqld start


· 源码安装MySQL(所有参数都能自定义)

1、安装编译工具和依赖环境,如cmake,这个是MySQL 5.6开始使用的编译工具

yum -y install ncurses ncurses-devel cmake gcc gcc-c++ openssl-devel bison cmake 


2、创建用户和组,和使用通用二进制安装一样,略


3、进入源码包目录,使用cmake进行编译,5.7版本开始需要有boost库的支持,具体参数可以在官方文档查询

cmake . \
-DDOWNLOAD_BOOST=1 或者 -DWITH_BOOST=/usr/local/boost
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DSYSCONFDIR=/etc \
-DMYSQL_DATADIR=/mysql_data \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DEXTRA_CHARSETS=all


4、cmake操作完成后执行运行make && make install命令,然后就是漫长的等待,之后就是初始化过程,和使用通用二进制包安装一模一样,略


评论