运维实战---多种方式在Linux中部署并初始化MySQL

运维实战---多种方式在Linux中部署并初始化MySQL

前言

MySQL是常用的关系型数据库,具有以下特点:

1、开源,不需要支付额外的费用即可使用

2、支持包括Windows/Linux在内的多个操作系统

3、支持多种语言,包括中文编码GB 2312、BIG5,日文的shift_JIS

4、为包括C、C++、java、python、PHP在内的多种编程语言提供了API

5、支持多种存储引擎,例如MyISAM、InnoDB

6、使用标准的SQL语言进行操作

7、支持多线程,充分利用CPU资源

8、存储数据量大,32位系统表文件最大可支持4GB,64位系统表文件最大可支持8TB

9、可以定制,采用了GPL协议,通过修改源码来开发自己的MySQL系统

基于以上特点,MySQL被广泛用于学习与实际工作中,本篇文章介绍在Linux系统中使用多种方式部署并初始化MySQL数据库,包括源码安装、rpm安装以及yum安装

实验环境介绍

1、最小化安装的4核4g Centos7.6 虚拟机

2、XShell远程连接工具

3、本文章中使用的所有源码包、rpm包的下载地址:https://www.mysql.com/downloads/

一、源码包安装MySQL

相较于其他两种安装,源码安装较繁琐,但优势在于可以在安装时以及初始化阶段将需要设置的参数一次性设置到位

以下是安装过程

1、配置MySQL&编译安装

一些版本的Linux系统中默认存在mariadb组件,该组件与安装MySQL是冲突的,在安装MySQL之前必须把该组件卸载掉,其中 --nodeps可以指定只删除mariadb-libs,不删除其依赖关系

复制代码
rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs

接下来为MySQL安装依赖,这些依赖包在本地yum源中均存在,无需配置其他网络yum源。不会配置本地yum源的同学请看
CentOS7.6配置本地仓库

复制代码
yum install -y cmake make gcc gcc-c++ openssl openssl-devel ncurses ncurses-devel bisonbison-devel

将依赖包上传至Linux系统中需要安装命令lrzsz,该命令可实现Windows拖动文件上传至Linux系统中

复制代码
yum -y install lrzsz

之后将在MySQL官网上下载的源码包拖动上传至Linux系统

解压源码包到指定路径下,解压完成后切换到该路径下

复制代码
tar -zxf mysql-boost-5.7.37.tar.gz -C /usr/src/
cd /usr/src/mysql-5.7.37/

接着进行预编译,有别于其他软件,MySQL的预编译使用的是cmake命令,复制以下代码

复制代码
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/usr/local/mysql/etc -DWITH_INNOBASE_STORAGE_ENGINE=ON -DWITH_MYISAM_STORAGE_ENGINE=ON -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DENABLED_LOCAL_INFILE=ON -DMYSQL_TCP_PORT=3306 -DMYSQL_UNIX_ADDR=/usr/local/mysql/tmp/mysql.sock -DWITH_INNODB_MEMCACHED=ON -DWITH_BOOST=boost/boost_1_59_0

#解释一下上述代码

-DCMAKE_INSTALL_PREFIX ---指定安装路径

-DMYSQL_DATADIR ---数据目录,即MySQL的数据存放路径

-DSYSCONFDIR ---配置文件所在路径

-DWITH_INNOBASE_STORAGE_ENGINE/-DWITH_MYISAM_STORAGE_ENGINE ---启用两种存储引擎

-DDEFAULT_CHARSET/-DDEFAULT_COLLATION ---指定字符集

-DENABLED_LOCAL_INFILE ---启用或禁用LOAD DATA LOCAL INFILE 语句

-DMYSQL_TCP_PORT ---指定服务端口号

-DMYSQL_UNIX_ADDR ---指定Unix套接字文件的路径

-DWITH_INNODB_MEMCACHED ---启用或禁用InnoDB 存储引擎对 Memcached 的支持

-DWITH_BOOST ---指定boost库

运行完上述代码

如果出现报错,检查一下依赖包是否都齐全

接着进行编译安装

复制代码
make -j4 && make install

其中-j选项表示多个线程进行编译,这样可以节省时间

2、初始化数据库

安装完成后,运行如下代码

复制代码
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
cd /usr/local/mysql
mkdir -p /usr/local/mysql/data  
mkdir -p /usr/local/mysql/etc   
mkdir -p /usr/local/mysql/tmp  
mkdir -p /usr/local/mysql/logs  
chown -R mysql:mysql /usr/local/mysql
vim  /usr/local/mysql/etc/my.cnf

解释一下上述代码

groupadd mysql #为MySQL创建一个组来管理软件的运行

useradd -r-g mysql -s /bin/false mysql #为MySQL创建一个用户来管理软件的运行

cd /usr/local/mysql #切换到MySQL的安装路径

mkdir -p /usr/local/mysql/data #创建安装前指定的数据存放目录

mkdir -p /usr/local/mysql/etc #创建安装前指定的配置文件所在目录

mkdir -p /usr/local/mysql/tmp #创建临时文件目录

mkdir -p /usr/local/mysql/logs #创建日志文件目录

vim /usr/local/mysql/etc/my.cnf #创建编辑配置文件,默认也存在配置文件但其中内容较少

将以下的配置文件粘贴进去

复制代码
[client]                                                #客户端设置
port=3306                                               #服务器监听端口,默认为3306
socket=/usr/local/mysql/tmp/mysql.sock                  #Unix套接字文件路径,默认/tmp/mysql.sock
 
[mysqld]                                                #服务端设置
## 一般配置选项
port=3306                                               #服务器监听端口,默认为3306
basedir=/usr/local/mysql                                #MySQL安装根目录
datadir=/usr/local/mysql/data                           #MySQL数据文件目录
socket=/usr/local/mysql/tmp/mysql.sock                  #Unix套接字文件路径,默认/tmp/mysql.sock
pid-file=/usr/local/mysql/tmp/mysql.pid                 #服务进程pid文件路径
character_set_server=utf8                               #默认字符集
default_storage_engine=InnoDB                           #默认InnoDB存储引擎
user=mysql
 
## 连接配置选项
max_connections=200                                     #最大并发连接数
table_open_cache=400                                    #表打开缓存大小,默认2000
open_files_limit=1000                                   #打开文件数限制,默认5000
max_connect_errors=200                                  #最大连接失败数,默认100
back_log=100                                            #请求连接队列数
connect_timeout=20                                      #连接超时时间,默认10秒
interactive_timeout=1200                                #交互式超时时间,默认28800秒
wait_timeout=600                                        #非交互超时时间,默认28800秒
net_read_timeout=30                                     #读取超时时间,默认30秒
net_write_timeout=60                                    #写入超时时间,默认60秒
max_allowed_packet=8M                                   #最大传输数据字节,默认4M
thread_cache_size=10                                    #线程缓冲区(池)大小
thread_stack=256K                                       #线程栈大小,32位平台196608、64位平台262144
 
## 临时内存配置选项
tmpdir=/tmp                                             #临时目录路径
tmp_table_size=64M                                      #临时表大小,默认16M
max_heap_table_size=64M                                 #最大内存表大小,默认16M
sort_buffer_size=1M                                     #排序缓冲区大小,默认256K
join_buffer_size=1M                                     #join缓冲区大小,默认256K
 
## Innodb配置选项
#innodb_thread_concurrency=0							#InnoDB线程并发数
innodb_io_capacity=200                                  #IO容量,可用于InnoDB后台任务的每秒I/O操作数(IOPS),
innodb_io_capacity_max=400                              #IO最大容量,InnoDB在这种情况下由后台任务执行的最大IOPS数
innodb_lock_wait_timeout=50                             #InnoDB引擎锁等待超时时间,默认50(单位:秒)
 
innodb_buffer_pool_size=512M							#InnoDB缓冲池大小,默认128M
innodb_buffer_pool_instances=4                          #InnoDB缓冲池划分区域数
innodb_max_dirty_pages_pct=75							#缓冲池最大允许脏页比例,默认为75
innodb_flush_method=O_DIRECT                            #日志刷新方法,默认为fdatasync
innodb_flush_log_at_trx_commit=2                        #事务日志刷新方式,默认为0
transaction_isolation=REPEATABLE-READ                   #事务隔离级别,默认REPEATABLE-READ
 
innodb_data_home_dir=/usr/local/mysql/data              #表空间文件路径,默认保存在MySQL的datadir中
innodb_data_file_path=ibdata1:128M:autoextend           #表空间文件大小
innodb_file_per_table=ON                                #每表独立表空间
 
innodb_log_group_home_dir=/usr/local/mysql/data         #redoLog文件目录,默认保存在MySQL的datadir中
innodb_log_files_in_group=2                             #日志组中的日志文件数,默认为2
innodb_log_file_size=128M                               #日志文件大小,默认为48MB
innodb_log_buffer_size=32M                              #日志缓冲区大小,默认为16MB
 
## MyISAM配置选项
key_buffer_size=32M                                     #索引缓冲区大小,默认8M
read_buffer_size=4M										#顺序读缓区冲大小,默认128K
read_rnd_buffer_size=4M									#随机读缓冲区大小,默认256K
bulk_insert_buffer_size=8M                              #块插入缓冲区大小,默认8M
myisam_sort_buffer_size=8M								#MyISAM排序缓冲大小,默认8M
#myisam_max_sort_file_size=1G                           #MyISAM排序最大临时大小
myisam_repair_threads=1                                 #MyISAM修复线程
skip-external-locking                                   #跳过外部锁定,启用文件锁会影响性能
 
## 日志配置选项
log_output=FILE                                         #日志输出目标,TABLE(输出到表)、FILE(输出到文件)、NONE(不输出),可选择一个或多个以逗>号分隔
log_error=/usr/local/mysql/logs/error.log               #错误日志存放路径
log_error_verbosity=1                                   #错误日志过滤,允许的值为1(仅错误),2(错误和警告),3(错误、警告和注释),默认值为3。
log_timestamps=SYSTEM                                   #错误日志消息格式,日志中显示时间戳的时区,UTC(默认值)和 SYSTEM(本地系统时区)
general_log=ON                                          #开启查询日志,一般选择不开启,因为查询日志记录很详细,会增大磁盘IO开销,影响性能
general_log_file=/usr/local/mysql/logs/general.log      #通用查询日志存放路径
 
## 慢查询日志配置选项
slow_query_log=ON                                       #开启慢查询日志
slow_query_log_file=/usr/local/mysql/logs/slowq.log		#慢查询日志存放路径
long_query_time=2                                       #慢查询时间,默认10(单位:秒)
min_examined_row_limit=100                              #最小检查行限制,检索的行数必须达到此值才可被记为慢查询
log_slow_admin_statements=ON                            #记录慢查询管理语句
log_queries_not_using_indexes=ON                        #记录查询未使用索引语句
log_throttle_queries_not_using_indexes=5                #记录未使用索引速率限制,默认为0不限制
log_slow_slave_statements=ON                            #记录从库复制的慢查询,作为从库时生效,从库复制中如果有慢查询也将被记录
 
## 复制配置选项
server-id=1                                             #MySQL服务唯一标识
log-bin=mysql-bin                                       #开启二进制日志,默认位置是datadir数据目录
log-bin-index=mysql-bin.index                           #binlog索引文件
binlog_format=MIXED                                     #binlog日志格式,分三种:STATEMENT、ROW或MIXED,MySQL 5.7.7之前默认为STATEMENT,之后默认为ROW
binlog_cache_size=1M                                    #binlog缓存大小,默认32KB
max_binlog_cache_size=1G                                #binlog最大缓存大小,推荐最大值为4GB
max_binlog_size=256M                                    #binlog最大文件大小,最小值为4096字节,最大值和默认值为1GB
expire_logs_days=7                                      #binlog过期天数,默认为0不自动删除
log_slave_updates=ON                                    #binlog级联复制
sync_binlog=1                                           #binlog同步频率,0为禁用同步(最佳性能,但可能丢失事务),为1开启同步(影响性能,但最安全不会丢失任何事务),为N操作N次事务后同步1次
 
relay_log=relay-bin                                     #relaylog文件路径,默认位置是datadir数据目录
relay_log_index=relay-log.index                         #relaylog索引文件
max_relay_log_size=256M                                 #relaylog最大文件大小
relay_log_purge=ON                                      #中继日志自动清除,默认值为1(ON)
relay_log_recovery=ON                                   #中继日志自动恢复
 
auto_increment_offset=1                                 #自增值偏移量
auto_increment_increment=1                              #自增值自增量
slave_net_timeout=60                                    #从机连接超时时间
replicate-wild-ignore-table=mysql.%                     #复制时忽略的数据库表,告诉从线程不要复制到与给定通配符模式匹配的表
skip-slave-start                                        #跳过Slave启动,Slave复制进程不随MySQL启动而启动
 
## 其他配置选项
#memlock=ON                                             #开启内存锁,此选项生效需系统支持mlockall()调用,将mysqld进程锁定在内存中,防止遇到操作系统导致mysqld交换到磁盘的问题
 
[mysqldump]                                             #mysqldump数据库备份工具
quick                                                   #强制mysqldump从服务器查询取得记录直接输出,而不是取得所有记录后将它们缓存到内存中
max_allowed_packet=16M                                  #最大传输数据字节,使用mysqldump工具备份数据库时,某表过大会导致备份失败,需要增大该值(大>于表大小即可)
 
[myisamchk]                                             #使用myisamchk实用程序可以用来获得有关你的数据库表的统计信息或检查、修复、优化他们
key_buffer_size=32M                                     #索引缓冲区大小
myisam_sort_buffer_size=8M                              #排序缓冲区大小
read_buffer_size=4M                                     #读取缓区冲大小
write_buffer_size=4M                                    #写入缓冲区大小

初始化最后一步,按照配置文件的内容来创建数据库

复制代码
bin/mysqld --defaults-file=/usr/local/mysql/etc/my.cnf --initialize --user=mysql
3、配置环境变量

为MySQL数据库配置环境变量

复制代码
echo export MYSQL_HOME=/usr/local/mysql >> /etc/profile   #软件的路径
echo export PATH=$MYSQL_HOME/bin:$PATH >> /etc/profile   #命令的路径
source /etc/profile   #重新加载系统环境变量配置文件

复制配置文件到init.d目录使系统能够使使用systemctl命令管理MySQL

复制代码
cp /usr/src/mysql-5.7.37/support-files/mysql.server /etc/init.d/mysql 
cd /etc/init.d/
chmod +x mysql
systemctl daemon-reload
systemctl start mysql
chkconfig mysql on
systemctl status mysql

设置软链接,把MySQL的命令都放在默认的命令里面,使得可以在系统的任何地方使用MySQL的命令

复制代码
ln -s /usr/local/mysql/bin/* /usr/local/bin/

自MySQL5.7版本起,MySQL初始有默认密码,存放在日志文件当中

复制代码
cat /usr/local/mysql/logs/error.log

将冒号之后的内容复制

复制代码
mysql -uroot -p

粘贴回车

进入之后的第一条命令只能修改密码,其他命令均无效

复制代码
set password=password('123456');

语法 set password=password('新密码');

至此,源码包安装MySQL完成,可以开始使用数据库了

二、yum安装MySQL

yum安装和rpm安装较简单

安装lrzsz命令,使文件能上传到Linux中

复制代码
yum -y install lrzsz

将在MySQL官网上下载的适合自己系统版本的yum源上传

安装yum源

复制代码
rpm -ivh mysql84-community-release-el7-1.noarch.rpm

查看可用的rpm包

复制代码
yum list | grep mysql

安装mysql-community-servr即可,会自动解决依赖关系

复制代码
yum -y install mysql-community-server

开启数据库服务

复制代码
systemctl start mysqld && systemctl enable mysqld && systemctl status mysqld

查看mysql默认密码

复制代码
cat /var/log/mysqld.log | grep password

进入MySQL

复制代码
mysql -uroot -p

修改密码

复制代码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword!123';
FLUSH PRIVILEGES;

至此yum安装完成,可以开始使用

三、rpm安装MySQL

同样上传rpm包

复制代码
yum -y install lrzsz

由于rpm包的互相依赖关系,必须按照如下顺序安装

复制代码
rpm -e mariadb-libs --nodeps
rpm -ivh mysql-community-common-5.7.37-1.el7.x86_64.rpm   
rpm -ivh mysql-community-libs-5.7.37-1.el7.x86_64.rpm     
rpm -ivh mysql-community-client-5.7.37-1.el7.x86_64.rpm   
rpm -ivh mysql-community-server-5.7.37-1.el7.x86_64.rpm 

下载完成之后启动

复制代码
systemctl start mysqld && systemctl enable mysqld && systemctl status mysqld
复制代码
cat /var/log/mysqld.log  | grep password
mysql -uroot -p

rpm安装方式默认密码策略为8位大小写、数字、符号

复制代码
set password=password('Aa12345&');

至此安装完成

本篇文章到处结束

相关推荐
oMcLin几秒前
如何在Ubuntu 20.04上配置并调优Kubernetes集群,确保在多租户环境下的高可用性与资源分配?
linux·ubuntu·kubernetes
cc_beolus11 分钟前
服务器介绍
运维·服务器
石头53015 分钟前
Service 详解
linux
小鸡脚来咯16 分钟前
Linux 服务器问题排查指南(面试标准回答)
linux·服务器·面试
末日汐19 分钟前
磁盘与文件系统
linux·运维·数据库
夏沫mds25 分钟前
基于hyperledger fabric的葡萄酒溯源系统
运维·fabric
水天需01026 分钟前
Linux PS4 环境变量详解
linux
小新ya36 分钟前
vscode增删改查文件,一直等待中...
linux·vscode
小李独爱秋37 分钟前
计算机网络经典问题透视:电子邮件的安全协议PGP主要都包含哪些措施?
运维·服务器·网络·网络协议·计算机网络·安全
萧曵 丶41 分钟前
MySQL InnoDB 实现 MVCC 原理
数据库·mysql·mvcc