当前位置: 首页 > news >正文

在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,不删除其依赖关系

1

2

rpm -qa |grepmariadb

rpm -e --nodeps mariadb-libs

接下来为MySQL安装依赖,这些依赖包在本地yum源中均存在,无需配置其他网络yum源。

1

yuminstall-y cmakemakegcc gcc-c++ openssl openssl-devel ncurses ncurses-devel bisonbison-devel

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

1

yum -yinstalllrzsz

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

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

1

2

tar-zxf mysql-boost-5.7.37.tar.gz -C/usr/src/

cd/usr/src/mysql-5.7.37/

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

1

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库

运行完上述代码

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

接着进行编译安装

1

make-j4 &&makeinstall

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

2、初始化数据库

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

1

2

3

4

5

6

7

8

9

groupadd mysql

useradd-r -g mysql -s/bin/falsemysql

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 #创建编辑配置文件,默认也存在配置文件但其中内容较少

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

[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#写入缓冲区大小

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

1

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

3、配置环境变量

为MySQL数据库配置环境变量

1

2

3

echoexportMYSQL_HOME=/usr/local/mysql>>/etc/profile#软件的路径

echoexportPATH=$MYSQL_HOME/bin:$PATH >>/etc/profile#命令的路径

source/etc/profile#重新加载系统环境变量配置文件

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

1

2

3

4

5

6

7

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的命令

1

ln-s/usr/local/mysql/bin/*/usr/local/bin/

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

http://www.cnnetsun.cn/news/2572955.html

相关文章:

  • iniparser与C++集成:如何在C++项目中安全使用C语言INI解析库
  • 从脚本到平台:超自动化巡检的技术演进
  • 深入解析 VS Code Markdown Mermaid 插件:如何在技术文档中高效绘制专业图表
  • 我放弃了保研,三年后去大厂面试,发现面试官是当年劝我读研的室友
  • Agent赋能智能运维:如何实现AI自动监控服务器并触发故障工单的闭环架构?
  • 嵌入式Linux内存稳定性验证:从memtester移植到实战测试
  • WinForms文件拖放失效的底层原因与可靠实现方案
  • 如何快速修复MTK设备的Preloader与GPT分区表
  • WeChatExporter:永久保存微信聊天记录的终极免费解决方案
  • GTA模组管理器Mod Loader:彻底改变经典游戏模组生态的完整技术解析
  • 老Mac升级macOS终极指南:五步解决硬件兼容性问题
  • Avogadro 2:5分钟掌握开源分子建模,开启化学可视化新时代
  • Python构建带担保的智能体招聘系统:架构、实现与安全
  • Agent-dispatch:让现有项目自主协作的轻量级调度系统设计与实现
  • 三步掌握AMD锐龙SMUDebugTool:免费硬件调试终极指南
  • 窗口大小不听话?WindowResizer让你的桌面布局随心所欲
  • 跨平台资源下载神器:如何轻松获取全网无水印内容
  • 手把手教你用cam_lidar_calibration标定镭神C32雷达与相机(含ring信息处理)
  • 深度解析:OpenCore Legacy Patcher的技术实现原理与兼容性方案
  • 供应链攻击后基础设施深度审计:从应急响应到云原生安全加固
  • H200一夜涨30%,AI的便宜时代结束了
  • Tomcat管理后台渗透:权限模型、War部署与Shell执行全链路解析
  • LLaMA-Mesh:文本生成可导入Blender的OBJ网格模型
  • Arduino_GFX性能优化秘籍:如何让你的显示效果提升300%
  • beeplay源码解析:put()与start()方法如何驱动音乐播放流程
  • 如何在iOS应用中快速集成DZNWebViewController:5分钟入门教程
  • QMCFLAC音频格式转换工具:3步解决QQ音乐加密文件播放限制
  • 实战指南:在Windows环境下精准测量WiFi RSSI信号强度
  • 车载以太网安全与深度学习模型压缩技术实践
  • 从‘飞鸟’到‘抛物’:我是如何用OpenCV+SORT优化高空抛物误报率的(附参数调试心得)