一、背景介绍

本文主要介绍MySQL二进制免编译软件包的安装过程详解,之所以选择二进制安装包部署MySQL8.0,是因为官方版本已经内置所有功能,在安装的时候可以指定数据库安装路径。

目前官网MySQL有四个版本,分别为GA版本、DMR版本、RC版本、Beta版本。一般情况下生产环境或者测试环境我们推荐使用GA版本,因为这个版本基本上所有功能都经过bug测试通过。

二、部署准备

  1. 实验环境的操作系统
    `[root@localhost ~]# cat /etc/redhat-release

    CentOS Linux release 7.5.1804 (Core)`

2.关闭SELinux

`vi /etc/sysconfig/selinux

 SELINUX=disabled`

3.关闭系统防火墙iptables
service iptables stop
iptables -F
iptables -X
iptables -Z
4.重启机器reboot
5.查看Centos7.x下IO支持的调度算法
dmesg |grep -i scheduler

可以看到Centos7.x默认支持的是deadline算法,而一般会在SSD固态硬盘环境中使用noop算法,在centos7.x上建议使用deadline模式
注:Centos7.x调整I/O Scheduler系统优化:https://www.zhangfangzhou.cn/centos-io-scheduler.html

6.swap分区的设置,swappiness值的大小建议都不要设置0和100,对wappiness数值大小解释如下:
如果系统内存够大,那么不应该让 linux 太多使用swap分区, 可以通过修改swappiness的数值。
当swappiness为0的时候表示最大限度使用物理内存,然后才是 swap空间;
当swappines为100的时候,则表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。

在CentOS、Red Hat、ubuntu等系统中,swappiness的默认值都为60
如果Linux服务器的内存很小,比如说低于4G,那么可以不用更改这个值,因为毕竟考虑到内存不够用而去借用swap的情况。
而相对于很多服务器来说,目前还是建议设置在值为25以下,如果超过了8G内存,而且目前内存使用量还有剩余的话,建议直接将swappiness改成0,这样可以最大限度的使用物理内存,减少硬盘的负载,同时加快速度。也避免在使用Memcached的时候出现"memcached timeout error because of slow response"这样的错误。

关于swappiness操作相关的命令

查看swappiness当前设置的值:
[root@liulei ~]# cat /proc/sys/vm/swappiness
30
修改swappiness的值:比如设置swappiness值为10
临时修改方案:
#sysctl vm.swappiness=10
vm.swappiness = 10
#cat /proc/sys/vm/swappiness
10
说明:采用临时修改方案,如果我们重启了系统,配置会失效.
永久修改方案:
在/etc/sysctl.conf 文件里添加如下参数:
vm.swappiness=10
或者:
#echo 'vm.swappiness=10'>> /etc/sysctl.conf

7.文件系统的选择,建议使用xfs文件系统,与ext4文件相比,它更方便管理、且支持动态扩容和方便删除文件
8.操作系统的限制,可以修改系统的软硬件限制来防止系统错误的发生。
编辑/etc/security/limits.conf,加入限制内容

9.关闭numa,让CPU可以更好利用内存

三、MySQL8.0部署配置详解

说明:mysql二进制安装包下载地址
https://dev.mysql.com/downloads/mysql/

  1. 创建MySQL用户和用户组
    groupadd mysql
    useradd -g mysql mysql -s /sbin/nologin
    2.把软件包解压到MySQL的家目录/usr/local下
    tar -xvf mysql-8.0.12-linux-glibc2.12-x86_64.tar.xz -C /usr/local/
    3.做软连接并赋予权限,执行如下命令:
    [root@localhost ~]# ln -s /usr/local/mysql-8.0.12-linux-glibc2.12-x86_64 mysql

    chown mysql:mysql -R mysql
    4.创建MySQL数据目录,并授权
    mkdir -p /data/mysql
    chown mysql:mysql -R /data/mysql
    5.编辑/etc/my.cnf配置参数文件
    [root@localhost ~]# cat /etc/my.cnf
    [client]
    port=3306
    socket=/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/
socket=/tmp/mysql.sock
pid-file=db.pid
character-set-server=utf8mb4
skip_name_resolve=1
open_files_limit=65535
back_log=1024
max_connections=512
max_connect_errors=1000000
table_open_cache=1024
table_definition_cache=1024
table_open_cache_instances=64
thread_stack=512K
external-locking=FALSE
max_allowed_packet=32M
sort_buffer_size=4M
join_buffer_size=4M
thread_cache_size=768
#query_cache_size=0
#query_cache_type=0
interactive_timeout=600
wait_timeout=600
tmp_table_size=32M
max_heap_table_size=32M
slow_query_log=1
slow_query_log_file=/data/mysql/slow.log
log-error=/data/mysql/error.log
long_query_time=0.1
server-id=3306101
log-bin=/data/mysql/mysql-bin
sync_binlog=1
binlog_cache_size=4M
max_binlog_cache_size=1G
max_binlog_size=1G
expire_logs_days=7
master_info_repository=TABLE
relay_log_info_repository=TABLE
gtid_mode=on
enforce_gtid_consistency=1
log_slave_updates
binlog_format=row
relay_log_recovery=1
relay-log-purge=1
key_buffer_size=32M
read_buffer_size=8M
read_rnd_buffer_size=4M
bulk_insert_buffer_size=64M

lock_wait_timeout=3600
explicit_defaults_for_timestamp=1
innodb_thread_concurrency=0
innodb_sync_spin_loops=100
innodb_spin_wait_delay=30

transaction_isolation=REPEATABLE-READ
#innodb_additional_mem_pool_size=16M
innodb_buffer_pool_size=512M
innodb_buffer_pool_instances=8
innodb_buffer_pool_load_at_startup=1
innodb_buffer_pool_dump_at_shutdown=1
innodb_data_file_path=ibdata1:1G:autoextend
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=32M
innodb_log_file_size=2G
innodb_log_files_in_group=2
innodb_max_undo_log_size=4G

innodb_io_capacity=4000
innodb_io_capacity_max=8000
innodb_flush_neighbors=0
innodb_write_io_threads=8
innodb_read_io_threads=8
innodb_purge_threads=4
innodb_page_cleaners=4
innodb_open_files=65535
innodb_max_dirty_pages_pct=50
innodb_flush_method=O_DIRECT
innodb_lru_scan_depth=4000
innodb_checksum_algorithm=crc32
##innodb_file_format=Barracuda
##innodb_file_format_max = Barracuda
innodb_lock_wait_timeout=10
innodb_rollback_on_timeout=1
innodb_print_all_deadlocks=1
innodb_file_per_table=1
innodb_online_alter_log_max_size=4G
internal_tmp_disk_storage_engine=InnoDB
innodb_stats_on_metadata=0

[mysqldump]
quick
max_allowed_packet=32M

6.初始化数据库

有密码初始化命令如下
[root@localhost ~]# /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/ --user=mysql --initialize
/usr/local/mysql/bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
解决办法:
yum search libaio
yum install -y libaio.x86_64 libaio-devel.x86_64

重新执行初始化命令成功
[root@localhost ~]# /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/ --user=mysql --initialize

注:无密码初始化命令如下:
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/ --user=mysql --initialize-insecure
注:临时初始化密码,像MySQL5.7一样,记录在log-error(错误日志)里面

7.启动数据库。命令如下:

/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
查看数据库启动日志

从日志可知数据启动成功,当然也可以查看mysql进程是否存在

查看mysql启动进程

可以看到mysql数据已经启动,但是直接使用mysql无法登陆数据库

原因:这是由于系统默认会查找/usr/bin下的命令,但是我们mysql是安装在/usr/local/mysql/bin/目录下的,所以这个mysql命令不在/usr/bin这个目录下,当然会找不到命令,可以通过做软连接,把/usr/local/mysql/bin/mysql映射一个链接到/usr/bin目录下:
ln -s /usr/local/mysql/bin/mysql /usr/bin
就可以直接使用下面命令登陆数据库:
mysql -uroot -p

登陆msyql数据库需要密码,原因是我们之前初始化时设置了密码,这个密码可以在error.log里面找到
[root@localhost ~]# cat /data/mysql/error.log |grep password
2018-08-23T01:10:18.173290Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: oJ+eg/cE!6)a
数据库密码就是:oJ+eg/cE!6)a
使用该密码登陆数据库
[root@localhost ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 22
Server version: 8.0.12

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

root@db 22:06: [(none)]>
首次登陆数据库需要修改数据库root密码
root@db 22:27: [(none)]> alter user 'root'@'localhost' identified by '123456';

安装完成之后;可以观察到MySQL8.0数据目录下的文件相比之前版本发生了一些变化。
[root@localhost ~]# ll /data/mysql/
total 5300312
-rw-r----- 1 mysql mysql 56 Aug 22 21:10 auto.cnf
-rw------- 1 mysql mysql 1676 Aug 22 21:10 ca-key.pem
-rw-r--r-- 1 mysql mysql 1112 Aug 22 21:10 ca.pem
-rw-r--r-- 1 mysql mysql 1112 Aug 22 21:10 client-cert.pem
-rw------- 1 mysql mysql 1680 Aug 22 21:10 client-key.pem
-rw-r----- 1 mysql mysql 6 Aug 22 21:28 db.pid
-rw-r----- 1 mysql mysql 8093 Aug 22 21:28 error.log
-rw-r----- 1 mysql mysql 4447 Aug 22 21:28 ib_buffer_pool
-rw-r----- 1 mysql mysql 1073741824 Aug 22 22:28 ibdata1
-rw-r----- 1 mysql mysql 2147483648 Aug 22 22:28 ib_logfile0
-rw-r----- 1 mysql mysql 2147483648 Aug 22 21:10 ib_logfile1
-rw-r----- 1 mysql mysql 12582912 Aug 22 21:28 ibtmp1
drwxr-x--- 2 mysql mysql 143 Aug 22 21:10 mysql
-rw-r----- 1 mysql mysql 178 Aug 22 21:10 mysql-bin.000001
-rw-r----- 1 mysql mysql 155 Aug 22 21:20 mysql-bin.000002
-rw-r----- 1 mysql mysql 178 Aug 22 21:28 mysql-bin.000003
-rw-r----- 1 mysql mysql 471 Aug 22 22:28 mysql-bin.000004
-rw-r----- 1 mysql mysql 116 Aug 22 21:28 mysql-bin.index
-rw-r----- 1 mysql mysql 25165824 Aug 22 22:28 mysql.ibd
drwxr-x--- 2 mysql mysql 4096 Aug 22 21:10 performance_schema
-rw------- 1 mysql mysql 1680 Aug 22 21:10 private_key.pem
-rw-r--r-- 1 mysql mysql 452 Aug 22 21:10 public_key.pem
-rw-r--r-- 1 mysql mysql 1112 Aug 22 21:10 server-cert.pem
-rw------- 1 mysql mysql 1680 Aug 22 21:10 server-key.pem
-rw-r----- 1 mysql mysql 1052 Aug 22 22:28 slow.log
drwxr-x--- 2 mysql mysql 28 Aug 22 21:10 sys
-rw-r----- 1 mysql mysql 10485760 Aug 22 21:28 undo_001
-rw-r----- 1 mysql mysql 10485760 Aug 22 22:28 undo_002

注:多了很多.pem文件,没有了.frm文件。而且undo日志文件从系统表空间拆分出来了。系统表和数据字典信息都存储在mysql.ibd文件中。

MySQL数据库正常关闭方式,命令如下:
/usr/local/mysql/bin/mysqladmin -uroot -proot123 shutdown'

转载于:https://blog.51cto.com/liuleis/2163250

MySQL8.0二进制免编译部署过程详解(二)相关推荐

  1. Linux下Nginx编译安装过程详解

    Linux下Nginx编译安装过程详解 一.Nginx介绍 二.Nginx源码下载 1.打开Nginx官网 2.下载官网的源码包 三.Nginx源码安装 1.解压源码包 2.安装开发包组及环境 3.编 ...

  2. Sonic 开源移动端云真机测试平台 - 设备中心接入安卓设备实例演示,Agent端服务部署过程详解

    Sonic 开源移动端云真机测试平台 - Agent端服务部署与安卓设备接入演示 一加8手机连接效果图展示 第一章:环境准备 ① agent-sources 资源包下载 ② Android SDK安装 ...

  3. zip安装mysql没有软件,windows10系统安装mysql-8.0.13(zip安装) 的教程详解

    安装环境说明 解压安装包 •解压路径:D:\develop\software •解压后mysql根目录:D:\develop\software\mysql-8.0.13-winx64 原则: 安装目录 ...

  4. 安卓 linux init.rc,[原创]Android init.rc文件解析过程详解(二)

    Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...

  5. Android init.rc文件解析过程详解(二)

    Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...

  6. U-Boot 之一 零基础编译 U-Boot 过程详解、Image 镜像介绍及使用说明、DTB 文件使用说明

      最近,工作重心要从裸机开发转移到嵌入式 Linux 系统开发,在之前的博文 Linux 之八 完整嵌入式 Linux 环境.(交叉)编译工具链.CPU 体系架构.嵌入式系统构建工具 中详细介绍了嵌 ...

  7. U-Boot 之一 零基础编译 U-Boot 过程详解 及 编译后的使用说明

      在之前的博文 Linux 之八 完整嵌入式 Linux 环境介绍及搭建过程详解 中我们说了要一步步搭建整个嵌入式 Linux 运行环境,今天就开始编译 U-Boot.我所使用的硬件平台及整个要搭建 ...

  8. mysql-8.0.12语法_mysql-8.0.12 (免安装版) 安装详解

    mysql-8.0.12 (解压版) 安装详解 错误解决 第一步:mysql-8.0.12 (解压版) 下载地址:https://www.mysql.com/downloads/ 第二步:配置初始化m ...

  9. linux下Redis服务器部署过程详解

    一.前言 最近公司需要使用redis缓存服务器,所以就用了一个下午的时间部署了一个linux版本的Redis缓存服务 器.Redis缓存服务器是近两年比较热门的NOSQL系统之一,它是一个key-va ...

最新文章

  1. boost::posix_time模块实现本地时间和 UTC 之间的转换的测试程序
  2. c#erp项目源码 mysql_Jsp+Ssm+Mysql实现图书馆预约占座管理系统项目源码(可带论文文档)...
  3. CodeForces - 993C Careful Maneuvering(几何+暴力+状态压缩)
  4. num_workers设置
  5. python 路由转发_[转载]无线传感器网络路由协议(转)
  6. Python——匿名函数lambda
  7. 让模拟器也支持GPS定位(模拟实现)
  8. 复印机扫描显示服务器链接错误代码,如何开启扫描失败后显示网络错误代码
  9. 做了快6年研发的女程序员,转行做什么合适呢?
  10. ad7606中文资料_AD7606
  11. iframe父元素获取子页面的元素
  12. 智能照明控制系统在城市夜景照明工程中的应用
  13. swagger转换成word文档
  14. 【吴恩达deeplearning.ai】Course 5 - 3.3 集束搜索
  15. Android事件总线设计(一)- EventBus初步学习
  16. 测试类型-- 按测试对象分 ※
  17. JDK19都出来了~是时候梳理清楚JDK的各个版本的特性了【JDK9特性讲解】
  18. vue中实现生成海报图片html2canvas详细教程
  19. 听力 JAVA_【VOA英语听力】 US Restarts Restrictions on Iran
  20. Mysql中使用Update From语句

热门文章

  1. 2. 虚拟机常用操作
  2. java 23种设计模式学习。
  3. 虚拟机Linux----Ubuntu1204----root登录设置
  4. MongoDB副本集配置系列二:配置MongoDB副本集
  5. 通过计算机名访问linux
  6. linux之iftop命令
  7. jstat查看JVM的GC情况
  8. Spring依赖处理过程源码分析
  9. 学习用Python编程时要避免的3个错误
  10. Kafka——使用spring进行集成