# 写在前言
致敬那些我曾经踩过的坑,希望对小伙伴们可以有所帮助,以下是对MySQL5.7版本的一个部署介绍
目录
环境介绍
系统:CentOS7
数据库:Mysql5.7.28
本文使用的是当前最新5.7.28版本,如果需要安装的版本比5.7.28高或者低,只要是5.7.*版本,那就可以按照本文说明安装,基本不会有任何问题。
一、安装前的准备
1.检查是否有安装过MariaDB与MySQL
rpm -qa|grep mariadb
rpm -qa|grep mysql
1.2卸载
rpm -e --nodeps 文件名
# 1.先检查mysql关键字的文件
whereis mysql
# 2. 根据返回的文件进行删除对应包含Mysql的文件【rm -rf .../mysql】
# 3. find / -name mysql
# 根据返回的文件名删除最后一个文件名包含mysql的【rm -rf ..../mysql】
1.3检查依赖
1.3.1 检查是否安装libaio
rpm -qa|grep libaio
如果没有安装则执行
yum -y install libaio //安装libaio
1.3.2 检查是否安装numactl
rpm -qa|grep numactl
如果没有安装则执行
yum -y install numactl //安装numactl
二、安装MySQL
1. 下载资源包
下载方式有两种一种通过wget直接在Linux服务器执行相应命令下载对应版本,或者直接通过官网下载对应的安装包到本地然后上传至服务器进行解压
1.1 官方资源下载
MySQL官网下载地址:MySQL :: Download MySQL Community Server
由于本文介绍并非最新版本安装,需要找历史版本,上图为本文安装的版本,如果安装的非5.7.28可以自行找到对应的版本进行下载上传到服务器。
1.2 wget方式
# wget 命令下载安装包仅供参考不是本文介绍重点下载方式
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.30-el7-x86_64.tar
2.解压
注:1.本文安装包上传到了 /opt/software/目录下
2.本文使用的是root权限的方式进行的操作 如果使用非root权限有些命令可能需要需要使用sudo XXXXX
进入安装包目录
cd /opt/software
解压安装包
tar -zxvf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
3.重命名
mv mysql-5.7.28-linux-glibc2.12-x86_64 mysql
4.拷贝
注:由于MySQL 许多配置信息默认使用目录为/usr/local/mysql 所以将解压后的重命名文件拷贝一份到/usr/local/目录
# 在/opt/software/ 目录下执行[需要切换成自己目录,如果上传就是在/usr/local 则不需要拷贝,直接将解压后的文件夹修改为 mysql即可 mv mysql-5.7.28-linux-glibc2.12-x86_64 mysql ]
cp -a mysql /usr/local/mysql
5.配置参数文件
注:配置文件在/etc 目录下,如果已经存在my.cnf 可先删除
rm -rf /etc/my.cnf
在执行创建文件命令
vim /etc/my.cnf
配置文件修改为以下内容,也可以根据自己需要设置参数。
[client]
port = 3306
socket = /usr/local/mysql/data/mysql.sock
default-character-set=utf8mb4
[mysqld]
port = 3306
socket = /usr/local/mysql/data/mysql.sock
skip-slave-start
skip-external-locking
key_buffer_size = 256M
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 4M
query_cache_size= 32M
max_allowed_packet = 16M
myisam_sort_buffer_size=128M
tmp_table_size=32M
table_open_cache = 512
thread_cache_size = 8
wait_timeout = 86400
interactive_timeout = 86400
max_connections = 600
# Try number of CPU's*2 for thread_concurrency
#thread_concurrency = 32
#isolation level and default engine
default-storage-engine = INNODB
transaction-isolation = READ-COMMITTED
# 每台机器上的MySQL用server-id来做区分,所以做集群或主从时,server-id必须不一样。
server-id = 104
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
pid-file = /usr/local/mysql/data/hostname.pid
#open performance schema
log-warnings
sysdate-is-now
# binlog_format有3种方式
binlog_format = ROW
log_bin_trust_function_creators=1
log-error = /usr/local/mysql/data/hostname.err
log-bin = /usr/local/mysql/log-bin/mysql-bin
expire_logs_days = 7
innodb_write_io_threads=16
relay-log = /usr/local/mysql/relay_log/relay-log
relay-log-index = /usr/local/mysql/relay_log/relay-log.index
relay_log_info_file= /usr/local/mysql/relay_log/relay-log.info
log_slave_updates=1
gtid_mode=OFF
enforce_gtid_consistency=OFF
# slave
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=4
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON
#other logs
#general_log =1
#general_log_file = /usr/local/mysql/data/general_log.err
#slow_query_log=1
#slow_query_log_file=/usr/local/mysql/data/slow_log.err
#for replication slave
sync_binlog = 500
#for innodb options
innodb_data_home_dir = /usr/local/mysql/data/
innodb_data_file_path = ibdata1:1G;ibdata2:1G:autoextend
innodb_log_group_home_dir = /usr/local/mysql/arch
innodb_log_files_in_group = 4
innodb_log_file_size = 1G
innodb_log_buffer_size = 200M
#根据生产需要,调整pool size
innodb_buffer_pool_size = 2G
#innodb_additional_mem_pool_size = 50M #deprecated in 5.6
tmpdir = /usr/local/mysql/tmp
innodb_lock_wait_timeout = 1000
#innodb_thread_concurrency = 0
innodb_flush_log_at_trx_commit = 2
innodb_locks_unsafe_for_binlog=1
#innodb io features: add for mysql5.5.8
performance_schema
innodb_read_io_threads=4
innodb-write-io-threads=4
innodb-io-capacity=200
#purge threads change default(0) to 1 for purge
innodb_purge_threads=1
innodb_use_native_aio=on
#case-sensitive file names and separate tablespace
innodb_file_per_table = 1
lower_case_table_names=1
[mysqldump]
quick
max_allowed_packet = 128M
[mysql]
no-auto-rehash
default-character-set=utf8mb4
[mysqlhotcopy]
interactive-timeout
[myisamchk]
key_buffer_size = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M
6.创建存储数据文件
在mysql文件夹中创建data log-bin relay_log tmp arch文件夹
mkdir data log-bin relay_log tmp arch
7.设置用户组并赋权
创建用户组
创建用户组前先检查是否存在如果存在测先删除
id mysql # 如果返回存在该用户组 则先进行删除
userdel mysql
# 删除后在进行创建
groupadd mysql
创建用户
-r:创建系统用户
-g:指定用户组
useradd -r -g mysql mysql
更改属主和数组
chown -R mysql:mysql /usr/local/mysql/
更改权限
chmod -R 755 /usr/local/mysql/
8.配置环境变量
注: 为啥要把环境变量放在此处就是为了让小伙伴们少踩坑,如果5.7.*没有配置环境变量初始化后启动成功后如果执行如下命令则会提示“-bash: mysql command not found”
mysql -uroot -p
不推荐直接在/etc/profile 文件中添加配置
/etc/profile中存放着全局环境变量信息。
环境变量在命令的角度理解就是:如果将/usr/local/mysql/bin/路径加入profile中,就相当于告诉系统可以来这个目录(/usr/local/mysql/bin/)下找命令。
例如:当我输入mysql命令时,系统就去遍历profile文件里面写的目录,分别去每个目录下找mysql这个命令,如果找不到就返回"-bash: mysql command not found"。
打开
vim /etc/profile.d/my_env.sh
加入
# mysql env
export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin
保存退出后输入 source /etc/profile 生效
查看已存在的环境变量目录
echo $PATH
9.初始化MySQL
进入MySQL的bin目录
cd /usr/local/mysql/bin
初始化
./mysqld --defaults-file=/etc/my.cnf --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ --initialize
初始化完成后会打印一个随机密码,后面会用到,由于初始化时引用到了my.cnf 配置文件,初始化时候的初始密码并未打印显示需要去data目录下的查看
cd /usr/local/mysql/data
cat hostname.err | grep password
10.启动MySQL
/usr/local/mysql/support-files/mysql.server start
11.设置软连接,并重启MySQL
ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
ln -s /usr/local/mysql/mysql.sock /var/mysql.sock
service mysql restart
12.登录并更改密码
[root@localhost bin]# mysql -uroot -p
Enter password: 输入初始化随机密码
两种改密方式二选一
alter user 'root'@'localhost' identified by '123456';
set password for root@localhost = '123456';
13.开放远程连接
mysql>use mysql;
msyql>update user set user.Host='%' where user.User='root';
mysql>flush privileges; //刷新权限
14.连接工具测试连接MySQL
如果服务器本地可以连接,但是连接工具远程连接不进去,则需要检查一下防火墙是否放行3306端口,也可以暂时先关闭防火墙后重试。
关闭防火墙
systemctl stop firewalld
15.MySQL启动和停止
两种方式选其一
启动
service mysql start
systemctl start mysql
停止
service mysql stop
systemctl stop mysql
重启
service mysql restart
systemctl restart mysql
查看状态
service mysql status
systemctl status mysql
三、设置开机自启动(可选)
将服务文件拷贝到 /etc/init.d下,并重命名为mysqld
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
赋予可执行权限
chmod +x /etc/init.d/mysqld
添加服务
chkconfig --add mysqld
显示服务列表
chkconfig --list
注:如果看到mysqld的服务,并且3,4,5都是on的话则成功,如果是off,则执行
chkconfig --level 345 mysqld on
重启系统
reboot
重启后查看mysql是否开机自启动
ps -ef|grep mysql
四、后记
由于本人在安装时候参考了下文博主的博文,安装的版本以及操作也有些不同,导致我在启动MySQL后查看是否开启bin-log日志时开关是OFF,至于问题超出了楼主的能力范围,所以楼主也不知道是为什么,就未对my.cnf 文件进行权限的赋值,如果按照的是楼主的方式初始化就不要对my.cnf进行赋权。
查看日志状态
# 登录MySQL后,输入show variables like '%log_bin%';查看到binlog日志为OFF关闭状态;
show variables like '%log_bin%';
成功开启日志