MySQL源码安装部署-8.0.33

一、背景

熟悉MySQL (8.0.33) 的安装部署,并解决安装过程中所碰到的问题。


二、目标

完成MySQL (8.0.33) 的安装部署,解决安装过程中所碰到的问题。同时,能够更快的熟悉相关业务。


三、过程

3.1 操作系统初始化

1)检查和设置网卡 bond 情况

2)检查磁盘大小和自动挂载情况

3)检查和设置硬盘的调度算法,关闭numa、关闭透明大页

  • 设置硬盘的调度算法为deadline:
    • 分读队列和写队列,读队列的优先级要高于写;
    • 读两个队列,写两个队列,一个按逻辑块地址( block address LBA)顺序排序,实行C-SCAN算法,另一个是FCFS;
    • 每批任务下来,要看FCFS队列里是否有年龄大于阈值的请求(默认是500ms),如果有,那么下一批IO操作就让含有这个请求的LBA队列来执行。
  • 关闭numa的原因:
    • NUMA(Non-uniform Memory Access)是一种特殊的多处理器架构,它是将系统内存分割成不同的区域,并允许这些内存区域访问速度不同。NUMA可以大大提高主机的内存吞吐量,但如果不适当地使用,又会降低系统的性能。例如:NUMA系统的内存分配并不均衡,尤其是当一个CPU的内存被完全占用的时候。这种情况之下,它会交换出第一个CPU上的部分内存,即便另外的CPU可能仍然有很多内存空闲。 很明显,交换是我们应当竭力避免的,这可能导致交换期间整个数据库的操作被阻塞,进而影响整个业务
  • 关闭透明大页 (Transparent Huge Pages, THP) 的原因:
    • THP 是内核的一个重要特征,且持续在演进,其目的是通过将页表项映射更大的内存,来减少 Page Fault,从而提升 TLB (Translation Lookaside Buffer,由存储器管理单元用于改进虚拟地址到物理地址的转译速度)的命中率。结合存储器层次结构设计原理可知,当程序的访存局部性较好时,THP 将带来性能提升,反之 THP 的优势不仅丧失,还有可能化身为恶魔,引起系统的不稳定:
      • 在 RAC 环境下,透明巨页(THP)会导致异常节点重启和性能问题;
      • 在单机环境中,透明巨页(THP)也会导致一些异常的性能问题;

4)检查 yum 源是否可用并安装常用依赖包(区域化无外网的情况下不做要求)

5)检查防火墙状态,如果开启的请修改为永久关闭

6)检查 selinux设置,如果不是 disabled 需要设置为 disabled 

  • Linux永久关闭防火墙的原因:Linux防火墙有两个,firewalldselinux
    • 防火墙firewalld作用:保护互联网对服务器的影响
    • selinux的作用:保护服务器内部程序对内部文件的访问
  • 然而,当我们安装应用程序时,防火墙会把它当作是“敌人”,阻止我们使用软件,每当打开linux,防火墙会重启,所以将其永久关闭。

7)设置操作系统配置参数

  • vm.swappiness:控制换出运行时内存的相对权重,值越大,表示越积极使用swap分区,越小表示越积极使用物理内存。
    • 对于Oracle一般设置为10;
    • 对于MySQL一般设置为1,尽可能不用swap分区。
  • fs.aio-max-nr:系统上允许同时进行的最大异步IO请求个数。
  • fs.file-max:表示系统级别的能够打开的文件句柄的数量。是对整个系统的限制,并不是针对用户的。
  • net.ipv4.ip_local_port_range:允许系统打开的端口范围即客户端ip对同一个ip+port可以创建的连接数。
  • net.core.rmem_default:这个参数表示内核套接字接受缓存区默认的大小
  • net.core.rmem_max: 这个参数表示内核套接字接受缓存区的最大大小。
  • net.core.wmem_default: 这个参数表示内核套接字发送缓存区默认的大小。
  • net.core.wmem_max: 这个参数表示内核套接字发送缓存区的最大大小。
  • net.core.somaxconn:Linux中的一个内核(kernel)参数,表示socket监听(listen)的backlog上限。
  • kernel.sem:信号量参数设置

8) 设置文件打开参数的限制

9)检查和设置时区

         原因:对于部署在海外的Linux服务器来说,拿到的机器时区和本地并不一样,导致运行在上面的应用也面临时区问题。所以有必要修改系统本地时区。

10)检查和配置时间同步

11)检查和设置语言为英文

12)检查和设置 swap

13) 检查和订正hostname

14)重启服务器检查并确保所有配置都生效

3.2 安装依赖包

yum -y install ncurses-devel cmake libaio-devel openssl-devel

yum install -y cmake gcc gcc-c++ ncurses ncurses-devel openssl* libtirpc libtirpc-devel bison zlib autoconf libarchive

  • 下载boost安装包:Index of main/release/1.77.0/source
  • 上传软件到服务器端并解压 :

    • tar -xvzf boost_1_77_0.tar.gz -C \usr\local

    •  cd \usr\local\boost_1_77_0

    • sudo ./bootstrap.sh

    • sudo ./b2 install

  • 执行完成,安装即成功

3.3 下载源码包

下载地址:MySQL :: Download MySQL Community Server

3.4 上传软件到服务器端并解压 

  • tar -zxvf mysql-8.0.33.tar.gz
  • cd mysql-8.0.33

3.5 配置(基于cmake进行配置)

cmake -DCMAKE_INSTALL_PREFIX=/data/app/mysql_8.0 -DSYSCONFDIR=/data/app/mysql_8.0/etc -DSYSTEMD_PID_DIR=/data/app/mysql_8.0 -DDEFAULT_charset=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_SSL=system -DWITH_READLINE=on -DMYSQL_DATADIR=/data/mysql_data/mysql_3308 -DWITH_BOOST=./boost -DWITH_SYSTEMD=1 -DFORCE_INSOURCE_BUILD=1

注意:如果没有安装BOOST可以添加以下配置信息来,自动下载boost

-DDOWNLOAD_BOOST=1 

选项说明:
-DCMAKE_INSTALL_PREFIX :安装路径
-DMYSQL_DATADIR :数据目录
-DMYSQL_TCP_PORT :端口号
-DMYSQL_UNIX_ADDR :套接字文件位置

3.6 编译安装

  • sudo make -j `grep processor /proc/cpuinfo | wc -l` && sudo make install

选项说明:

     - j  :代表同时开启多个线程共同实现编译操作

mkdir /data/app/mysql_8.0
mkdir /data/app/mysql_8.0/tmp
mkdir /data/app/mysql_8.0/etc
mkdir /data/mysql_data/mysql_3308_logs  # mysql日志文件夹
mkdir /data/mysql_data/mysql_3308  # mysql数据库文件夹

# 部分环境不创建启动会报错,原因不明
mkdir /var/lib/mysql-files

3.8 编辑配置文件 

  • cp /etc/my.cnf  /data/app/mysql_8.0/etc/my.cnf
  • 插入:

[mysqld]
port=3308
autocommit=ON
character-set-server=utf8mb4
basedir=/data/app/mysql_8.0
datadir=/data/mysql_data/mysql_3308
tmpdir=/data/app/mysql_8.0/tmp
socket=/data/mysql_data/mysql_3308/mysql.sock
pid-file=/data/mysql_data/mysql_3308/mysql.pid
log-error=/data/mysql_data/mysql_3308_logs/error.log
lower_case_table_names=1
lc_messages_dir = /data/app/mysql_8.0/share
lc_messages=en_US
innodb_buffer_pool_size=24G
server-id=1

[mysql]
no-auto-rehash


3.9 初始化

1)创建用户

groupadd mysql
useradd mysql -g mysql -M -s /sbin/nologin

2)文件夹授权(安装文件夹、数据库文件夹、日志文件夹)

chown -R mysql:mysql /data/app/mysql_8.0
chmod -R 755 /data/app/mysql_8.0
chown -R mysql:mysql /data/mysql_data/mysql_3308
chmod -R 755 /data/mysql_data/mysql_3308
chown -R mysql:mysql /data/mysql_data/mysql_3308_logs

3)初始化:

  • /data/app/mysql_8.0/bin/mysqld --defaults-file=/data/app/mysql_8.0/etc/my.cnf --user=mysql --basedir=/data/app/mysql_8.0 --datadir=/data/mysql_data/mysql_3308  --initialize --console

会产生一个初始密码,如:FuA::Z7gAxRy

3.10 启动mysql服务

  • /data/app/mysql_8.0/bin/mysqld_safe --defaults-file=/data/app/mysql_8.0/etc/my.cnf --user=mysql &
  • 查询端口,确认mysql服务是否启动
    • sudo netstat -tlnp | grep 3308

1)修改登录密码

  • /data/app/mysql_8.0/bin/mysql -uroot -P 3308 -h 127.0.0.1 -p

输入初始密码后,进入MySQL程序:

  • update mysql.user set authentication_string=password('123456') where user='root' and host='localhost';

3.11 关闭MySQL服务

  • mysqladmin -u root -p shutdown

3.12 设置可远程连接的权限

#使用mysql数据库
use mysql;

#先查看一下host访问权限(host默认是仅localhost访问权限)
select host,user from user; # 或者
select host,authentication_string,user from user;

#允许所有主机,都可以通过用户为root用户,密码为默认数据库登录密码,进行访问数据库
update user set host='%' where user='root';

#再次查看host访问权限,即可看到允许哪些主机有访问权限等
select host,user from user; # 或者
select host,authentication_string,user from user;

#刷新权限
flush privileges;

X. 报错问题及解决:

1. 报错:

MySQL currently requires boost_1_77_0

– Could not find (the correct version of) boost.
– MySQL currently requires boost_1_77_0

CMake Error at cmake/boost.cmake:81 (MESSAGE):
You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=

This CMake script will look for boost in . If it is not there,
it will download and unpack it (in that directory) for you.

If you are inside a firewall, you may need to use an http proxy:

export http_proxy=http://example.com:80

Call Stack (most recent call first):
cmake/boost.cmake:238 (COULD_NOT_FIND_BOOST)
CMakeLists.txt:451 (INCLUDE)

解决方法:
从MySQL 8.0.33开始Boost库是必需的
下载 mysql-boost-1.77.0.tar.g 在 cmake 指定参数
-DWITH_BOOST=boost/boost_1_59_0/
直接cmake指定参数
-DDOWNLOAD_BOOST=1 -DWITH_BOOST
系统会下载 boost

猜你喜欢

转载自blog.csdn.net/m0_57126939/article/details/130627861