Centos7 安装不同版本的Mysql数据库详解(5.6 5.7 8.0)

在本章就开始在我们的环境上进行实际搭建,此次搭建参考以下几个版本,并在其中介绍5.6与5.7的区别所在,应之前朋友们的要求,此处将8.0的安装也一并进行演示安装

Mysql5.6.34(Mysql稳定版本)

Mysql5.7.20(Mysql稳定版本)

Mysql8.0.15(官方最新GA版本)

安装介绍

之前我们说过Mysql很轻量,那么Mysql的安装就一定很简单吗?

 答:是的,很简单,但是死板的安装大家上网上找篇文章谁都能搭建出来,无非就是时间长短问题罢了,所以考虑到以后大家在生产环境上安装,我们直接就将需要考虑到的准备工作做全,在安装Mysql之前我们也需要对自己的环境进行优化之后再进行安装,这样就像一个出生的婴儿,他可以在一个温暖家庭出生及生长,费话不多说,先看一下我的基础环境(三个版本我是分三个虚机安装,条件有限的朋友可以尝试重复安装)

机器1:

网络:桥接OS:

CentOS7.4

CPU:4核

内存:8G

磁盘:100G

机器2:网络:桥接

OS:CentOS7.4

CPU:4核

内存:8G

磁盘:100G

机器3:网络:桥接

OS:CentOS7.4

CPU:4核

内存:8G

磁盘:100G

环境准备

5.6、5.6、8.0的环境准备均是一样的

1.网络环境:因为我们目前是学习使用,所以可以将服务器的防火墙、selinux进行关闭,避免影响到我们学习时一些通讯问题,文件权限写入问题等等,一般生产上selinux也是不开的,防火墙也是在硬件上进行维护,所以大家关闭即可,关闭方式如下:

CentOS7:

防火墙临时关闭:systemctl stop firewalld

关闭防火墙开机自启:systemctl disable firewalld

selinux临时关闭:setenforce 0

selinux永久关闭:sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux

只替换指定的 SELINUX=enforcing

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

CentOS6:

防火墙临时关闭:service iptables stop

关闭防火墙开机自启:chkconfig iptables off

selinux临时关闭:setenforce 0

selinux永久关闭:sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux

建议大家将四部分全部执行操作,不然服务可能还是处于开启状态,如selinux 修改了配置文件并不会立即生效

Selinux简单带一下:防火墙的作用大家都清楚,是对外保护的服务,Selinux通俗的说其主要保护的是对Linux文件写入、修改、删除进行保护的,其有一套特定的规则可以进行配置,有兴趣了解的朋友可以研究一下,现在生产上用的很少,所以也不用当作重点

2.CPU IO调度模型:IO调度模式对数据库也至关重要,Mysql是通过CPU进行IO调度去磁盘获取数据,但IO调度也有适应的不同场景,比如SAS磁盘和固态盘的不同选择,让我们一起看下,

查看当前IO调度模式:[]内为默认

[root@localhost /data/server]# cat /sys/block/sda/queue/scheduler

noop [deadline] cfq [root@localhost /data/server]#

1)cfg模式为比较通用的算法,保证所有任务尽量公平此模式会给进程任务分配一个请求队列与时间片在此时间片内由进程向设备文件进行请求,时间片消耗完后被挂起等待调度

2)deadline模式是在cfg的基础上,确保了在一个截止时间内服务请求,这个截止时间是可调整的而默认读期限短于写期限.这样就防止了写操作因为不能被读取而饿死的现象deadline是数据库服务器IO模型的最好选择 优先处于读请求 比较适合于SAS似机械磁盘

3)noop模式只有一个队列,每当有新的请求进来会将其与最近请求进行合并设备文件此模式优先写而饿死读操作,与deadline相点相反的意思此模式如果是机械磁盘极度不建议使用,如果是固态磁盘则可以

尝试修改当前IO调度模式:

Centos7:grubby --update-kernel=ALL --args="elevator=deadline"

Centos6:vi /etc/grub.conf 尾行添加 elevator=deadline     

  echo deadline > /sys/block/sda/queue/scheduler

3.SWAP使用力度:SWAP是一个对操作系统内存的保护机制,是磁盘上文件到内存的映射,在内存不足或内存任务不活跃时操作系统会将这些任务唤出到SWAP中,以防止系统负载过高,导致操作系统直接挂起,操作系统就是你的大脑,大脑烧掉了,身上的零件就都没啥用了,但过多使用SWAP就会降低数据库的性能,因为其本身并不是内存,所以我们取一个权衡值,既保障有SWAP使用,但尽量不使用(如果你的公司不差钱,机器的性能都特别高,那可以直接将swap设置为0,主库如果down机直接进行切换从库,性能至上)

查看当前分配比例:

[root@localhost /data/server]# cat /proc/sys/vm/swappiness

30

[root@localhost /data/server]#

修改使用优先级比例:

当前修改:echo 10 > /proc/sys/vm/swappiness

开机调用:echo -e "echo 10 > /proc/sys/vm/swappiness">> /etc/rc.d/rc.local

4.文件系统:CentOS6的默认文件系统为ex4,7的默认为XFS,进行数据库业务选择时我们建议使用XFS,后续学到Mysql索引时会了解到Mysql是B+TREE的结构,而XFS也是这种存储方式,与Mysql结合更好,并且此文件系统类型更稳定

CentOS6格式化XFS需要操作如下:

1.yum install -y xfsprogs xfsdump

2.将文件系统格式化为xfs格式

5.系统参数:Mysql本身就是为应用提供服务的,所以生产上会有大量的连接到Mysql上,并且并发进行文件数据读取,而Linux本身为了防止并发进程过多导致系统崩溃,对进行参数进行了限制,我们直接进行修改即可

查看:ulimit-a

1.打开文件的句柄数:open files(防止too many open files错误)

2.针对用户数量限制:max user processes (防止单机多实例,连接数过多拒绝新连接)

修改:echo-e"*  soft  nproc  65535\n*  hard  nproc  65535\n*  soft  nofile  65535\n*  hard  nofile  65535\n" >> /etc/security/limits.conf

这个版本的没有生效,

生效:退出当前终端重新登陆ulimit –a查看两项参数是否已变更为65535

(自己运行版本)

为了防止以上两种报错情况,我们可以修改系统的软硬限制。编辑 /etc/security/limits.conf 加入限制的相关内容。

记得更改完内容之后,需要重启操作系统才能生效。

vi /etc/security/limits.conf

*      soft    nproc  65535

*      hard    nproc  65535

*      soft    nofile  65535

*      hard    nofile  65535

以上我们就完成了基础环境准备,下面就一起开始进行Mysql安装

Mysql5.6安装

一、环境准备:

1.目录创建:

mkdir -p /data/{software,mysql}         

mkdir -p /data/mysql/{data,log,tmp}

2.用户创建:useradd mysql

3.安装依赖包:yum install perl perl-devel perl-Data-Dumper libaio-devel -y

二、安装:

1.下载包文件:cd /data/software/       

wget https://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz       

解压

tar -zxvf mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz       

mv mysql-5.6.34-linux-glibc2.5-x86_64 /usr/local/mysql

2.权限赋值:chown -R mysql:mysql /usr/local/mysql /data/mysql/*

三、配置文件: vi /etc/my.cnf

大家也可以在群里找我要文件发送给大家(后续我们一一讲解参数的意义)

[client]

port    = 3306

socket  = /data/mysql/tmp/mysql.sock

[mysql]

prompt="\u@db \R:\m:\s [\d]> "

no-auto-rehash

[mysqld]

user    = mysql

port    = 3306

basedir = /usr/local/mysql

datadir = /data/mysql/data

socket  = /data/mysql/tmp/mysql.sock

pid-file = /data/mysql/tmp/mysql.pid

character-set-server=utf8

collation-server = utf8_general_ci

#skip-character-set-client-handshake=true

#init_connect='insert into auditlog.accesslog(ConnectionID,ConnUserName,PrivMatchName,LoginTime) values(connection_id(),user(),current_user(),now());'

skip_name_resolve=1

event_scheduler = on

sql_mode='NO_UNSIGNED_SUBTRACTION,NO_ENGINE_SUBSTITUTION'

open_files_limit = 65535

innodb_open_files = 65535

back_log=1024

max_connections = 512

max_connect_errors=1000000

interactive_timeout=300

wait_timeout=300

max_allowed_packet = 1024M

table_open_cache=2048

table_definition_cache=2048

table_open_cache_instances = 32

thread_cache_size = 128

thread_stack = 512K

external-locking = FALSE

max_tmp_tables=200

tmp_table_size=100M

max_heap_table_size=100G

explicit_defaults_for_timestamp = 1

lock_wait_timeout = 3600

auto_increment_increment = 1

auto_increment_offset = 1

autocommit = ON

secure_file_priv=''

read_only = OFF

lower_case_table_names=1

innodb_fast_shutdown = 0

innodb_force_recovery=0

innodb_buffer_pool_dump_at_shutdown = 1

innodb_buffer_pool_load_at_startup = 1

log-error=/data/mysql/log/error.log

slow_query_log=ON

slow_query_log_file=/data/mysql/log/slow_mysql.log

long_query_time=2

innodb_flush_log_at_trx_commit=1

innodb_log_file_size =1G

innodb_log_files_in_group=3

innodb_log_group_home_dir=./

sync_binlog = 1 

binlog_cache_size = 16M

max_binlog_cache_size = 1G

max_binlog_size=1G

expire_logs_days = 30

default-storage-engine = INNODB

#internal_tmp_disk_storage_engine = INNODB

transaction_isolation=REPEATABLE-READ

innodb_max_dirty_pages_pct = 50

innodb_adaptive_flushing = ON

innodb_flush_method = O_DIRECT

sort_buffer_size=8M

join_buffer_size=8M

query_cache_size=0

query_cache_type=0

read_buffer_size = 8M

optimizer_switch="index_condition_pushdown=on,mrr=on,mrr_cost_based=on,batched_key_access=off,block_nested_loop=on"

read_rnd_buffer_size = 8M

innodb_old_blocks_pct=35

#innodb_additional_mem_pool_size= 128M

innodb_buffer_pool_size= 1G

innodb_buffer_pool_instances = 16

innodb_log_buffer_size =32M

bulk_insert_buffer_size=128M

innodb_change_buffer_max_size = 50

innodb_doublewrite=on

innodb_adaptive_hash_index = on

innodb_file_per_table =1

innodb_data_file_path = ibdata1:1024M:autoextend

innodb_page_size = 16k

#innodb_checksum_algorithm =crc32 

innodb_lock_wait_timeout = 35

innodb_rollback_on_timeout = on

innodb_sync_spin_loops = 100

innodb_spin_wait_delay = 30

innodb_lru_scan_depth = 4000

innodb_thread_concurrency = 0

innodb_write_io_threads = 2

innodb_read_io_threads = 2

innodb_purge_threads = 2

innodb_io_capacity = 800

innodb_io_capacity_max = 1600

server-id = 3306110

log-bin= /data/mysql/log/binlog-mysql

binlog_format=row

四、初始化Mysql

1.查看初始化使用帮助:/usr/local/mysql/scripts/mysql_install_db --help

2.初始化当前Mysql:

/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql/data --defaults-file=/etc/my.cnf --user=mysql

4.查看初始化后数据库文件:ls /data/mysql/data/

如果包括mysql、information_schema、test目录即可以视为初始化成功

[root@localhost data]# ls

ib_buffer_pool  ibdata1  ib_logfile0  ib_logfile1  ib_logfile2  mysql  test  undo001  undo002  undo003

5.最后我们启动mysql:/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &

6.修改密码:/usr/local/mysql/bin/mysqladmin -u root password '123456'

登录测试

/usr/local/mysql/bin/mysql -uroot -p

我们看一下图示内容:正常初始化后会出现两个OK的提示,并提示我们使用mysqladmin命令进行密码的初次配置,最后使用mysqld_safe方式启动Mysql,我们在启动时手工指定了配置文件的位置,其实也可以不用指定,但你需要知道Mysql找寻配置文件时的顺序,如下:

/etc/my.cnf

/etc/mysql/my.cnf

/usr/local/mysql/etc/my.cnf

Mysql5.7安装

Mysql5.7的安装与5.6的安装方式基本一致,不同的地方在于初始化部分,我们来看一下不同的地方

5.7初始化Mysql:

初始化操作:/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/data --user=mysql --initialize

查看随机密码:可以看到我们的初始密码为 "Eiv*/Dy!I44t"

[root@localhost data]# cat /data/mysql/log/error.log  | grep password

2019-02-21T10:45:24.067928Z 1 [Note] A temporary password is generated for root@localhost: Eiv*/Dy!I44t

5.启动mysql:/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &

修改密码

/usr/local/mysql/bin/mysqladmin -uroot -p password

登录测试

/usr/local/mysql/bin/mysql -uroot -p

5.6与5.7区别总结:此处仅介绍初始化后的不同,更多特性上的不同后续我们进行讲解

Mysql5.6:

1.初始化命令为mysql_install_db,初始化之后会由我们自己来进行密码的初次修改

2.数据目录下包含mysql information_schema test performache_schema四个数据库

Mysq.5.7:

1.初始化命令为mysqld,并多了一个initialize参数初始化之后默认会生成一个随机密码至error.log文件中后续我们使用这个密码进行二次修改这个密码只是Mysql提供给我们初次使用的登陆之后会提示我们密码过期问题所以我们一般在初始化之后直接对密码进行二次修改使用如下命令:

/usr/local/mysql/bin/mysqladmin -uroot -p password

输入刚刚的随机密码,再输入两次你需要的密码即可2.数据目录下包含mysql information_schema sys performache_schema四个数据库

5.7初始化参数介绍:

initialize参数:当我们添加这个参数时Mysql会默认帮我们生成一个随机密码到error.log文件内

initialize-insecure:如果我们在5.7初始化时指定这个参数,那么此时会和5.6初始化后结果相同,不会为我们生成随机密码由用户进行第一次的密码配置

Mysql8.0安装

一、环境准备:1.目录创建:mkdir -p /data/{software,mysql} 

                  mkdir -p /data/mysql/{data,log,tmp}

2.用户创建:useradd mysql

3.安装依赖包:yum install perl perl-devel perl-Data-Dumper libaio-devel -y

二、安装:1.下载包文件:cd /data/software/       

wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.15-linux-glibc2.12-x86_64.tar.xz       

xz -d mysql-8.0.15-linux-glibc2.12-x86_64.tar.xz       

tar -xvf mysql-8.0.15-linux-glibc2.12-x86_64.tar       

mv mysql-8.0.15-linux-glibc2.12-x86_64 /usr/local/mysql

2.权限赋值:chown -R mysql:mysql /usr/local/mysql /data/mysql/*

三、配置文件: vi /etc/my.cnf

大家可以继续使用上面的配置文件内容但需要将部分参数进行删减,因为有部分特性至Mysql8.0已经彻底废弃了,如下:

max_tmp_tables=200

query_cache_size=0

query_cache_type=0

后续讲解8.0新特性时我们会添加一些新的配置参数

四、初始化

/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/data --user=mysql --initialize

查看初始化后数据库文件:ls /data/mysql/data/ 包括

[root@localhost data]# ls

auto.cnf    ca.pem          client-key.pem  ibdata1      ib_logfile1  ibtmp1        mysql      performance_schema  public_key.pem  server-key.pem  undo_001ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile0  ib_logfile2  #innodb_temp  mysql.ibd  private_key.pem    server-cert.pem  sys            undo_002[root@localhost data]#

五、最后我们启动mysql:/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf&

查看随机密码:可以看到我们的初始密码为 "nekpGErvF9*i"

[root@localhost data]# cat /data/mysql/log/error.log  | grep password

修改密码

/usr/local/mysql/bin/mysqladmin -uroot -p password

六、登入Mysql:

[root@localhost log]# /usr/local/mysql/bin/mysql -uroot -p

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is9Server version: 8.0.15 MySQL Community Server - GPLCopyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;'or'\h'for help. Type '\c' to clear the current input statement.root@db 10:36:  [(none)]>

关闭数据库命令

cd /usr/local/mysql/bin

./mysqladmin -uroot -p123456 shutdown

Mysql密码重置

至此,Mysql的安装我们学习完成了,那安装完成之后如果我们不小心把error.log文件搞丢了那就查看不到password信息了,或者二次进行修改密码时输入问题导致密码登陆不上了,那应该怎么办,此时我们也可以使用如下的方式进行密码重置,操作很简单,思路是将Mysql的密码权限表跳过,直接可以不用家门钥匙就能进到家门里面了,而且可以为所欲为,这时我们就可以去家里找到我们的钥匙,或者把钥匙和锁都换一把,我们来实际操作一下

注:生产中可能我们不会进行此操作,密码都会由DBA或DBA经理进行严格保管,基本没有丢失情况发生,并且一般业务都是禁止停库操作的,但万事也不能保证100% 如果在维护中不够规范导致密码丢失时,可以选择性进行密码重置

1)关闭Mysql:killall mysqld  或  ps aux | grep mysql | grep -v grep |awk '{print $2}' |xargs kill -9 (不建议使用此类方式停止Mysql,但目前为非常情况因为没有Mysql密码,所以不能使用mysqladmin shutdown的正常关库方式关闭Mysql)

2)使用跳过密码权限表的方式启动Mysql:/usr/local/mysql/bin/mysqld_safe –defaults-file=/etc/my.cnf –skip-grant-tables &参数:--skip-grant-tables是跳过了mysql.user表的权限验证信息,让我们可以直接进入Mysql进行数据库操作

3)登陆:mysql (敲mysql命令就直接可以登入了)

4)查看用户:select user,host from mysql.user;(查看一下我们需要修改的用户信息)

5)修改密码:(Mysql的权限我们后续会再次进行讲解,先了解一下是由用户%主机+密码方式验证的)update mysql.user set authentication_string=PASSWORD('new-password') where user='root'and host='localhost';注意:此处我们使用的版本是5.7,以前版本使用如下命令,5.7之后密码的存储字段发生了变化:update mysql.user set password=PASSWORD('new-password') where user='root'and host='localhost';

6)刷新权限:flush privileges;(Mysql修改user表后不会立即生效,需要执行此命令进行权限的刷新)

7)重启Mysql:

1.关闭Mysql:killall mysqld  或  ps aux | grep mysql | grep -v grep |awk '{print $2}' |xargs kill -9

2.启动Mysql:/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容