博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql学习笔记---mysql的安装--编译安装
阅读量:3961 次
发布时间:2019-05-24

本文共 12865 字,大约阅读时间需要 42 分钟。

编译安装(源码安装)

注:准备一台全新的虚拟机,配置最好是:4G 2核 否则可能在最后安装时卡死

1,将rpm源码包(官方网站下载)上传到linux里

[root@localhost ~]# lsanaconda-ks.cfg  mysql-community-5.7.29-1.el7.src.rpm

2,手动解决依赖关系

[root@localhost ~]# yum  install cmake ncurses-devel gcc  gcc-c++  vim  lsof bzip2 openssl-devel -y已加载插件:fastestmirrorLoading mirror speeds from cached hostfile * base: mirrors.163.com * extras: mirrors.163.com * updates: mirrors.cn99.com软件包 2:vim-enhanced-7.4.629-6.el7.x86_64 已安装并且是最新版本正在解决依赖关系--> 正在检查事务

3,解压.rpm结尾的文件

[root@localhost ~]# rpm -ivh mysql-community-5.7.29-1.el7.src.rpm 警告:mysql-community-5.7.29-1.el7.src.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY正在升级/安装...   1:mysql-community-5.7.29-1.el7     ################################# [100%][root@localhost ~]# lsanaconda-ks.cfg  mysql-community-5.7.29-1.el7.src.rpm  rpmbuild

解压真正的源码包

[root@localhost ~]# cd rpmbuild/[root@localhost rpmbuild]# lsSOURCES  SPECS[root@localhost rpmbuild]# cd SOURCES/[root@localhost SOURCES]# SL-bash: SL: 未找到命令[root@localhost SOURCES]# lsboost_1_59_0.tar.bz2  filter-provides.sh  filter-requires.sh  mysql-5.6.45.tar.gz  mysql-5.7.29.tar.gz[root@localhost SOURCES]# tar xf boost_1_59_0.tar.bz2 [root@localhost SOURCES]# tar xf mysql-5.7.29.tar.gz [root@localhost SOURCES]# lsboost_1_59_0  boost_1_59_0.tar.bz2  filter-provides.sh  filter-requires.sh  mysql-5.6.45.tar.gz  mysql-5.7.29  mysql-5.7.29.tar.gz#将boost_1_59_0 移动到解压后的mysql-5.7.29里[root@localhost SOURCES]# mv boost_1_59_0 mysql-5.7.29[root@localhost SOURCES]# cd mysql-5.7.29[root@localhost mysql-5.7.29]# lsboost_1_59_0    cmd-line-utils   Doxyfile-perfschema  libbinlogstandalone  man         plugin   source_downloads  support-files  winBUILD           config.h.cmake   extra                libmysql             mysql-test  rapid    sql               testclients    zlibclient          configure.cmake  include              libmysqld            mysys       README   sql-common        unittestcmake           dbug             INSTALL              libservices          mysys_ssl   regex    storage           VERSIONCMakeLists.txt  Docs             libbinlogevents      LICENSE              packaging   scripts  strings           vio

4,编译前的配置,执行cmake

cmake  -DCMAKE_INSTALL_PREFIX=/usr/local/sc_mysql -DMYSQL_DATADIR=/data/mysql  -DSYSCONFDIR=/etc  -DMYSQL_USER=mysql  -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci  -DWITH_BOOST=boost_1_59_0
cmake 是一个编译器,就是将c语言编写的代码翻译成机器可以执行的二进制的程序。gcc 也是一个编译器-DCMAKE_INSTALL_PREFIX 是编译安装MySQL的时候的固定语法参数,是给cmake传参的,告诉cmake 去生成一个叫做Makefile的文件-DCMAKE_INSTALL_PREFIX=/usr/local/mysql   指定MySQL安装的路径/usr/local/mysql  具体的路径可以自己定义-DMYSQL_DATADIR=/data/mysql   -->指定MySQL的存放数据(仓库)的目录    具体的路径可以自己定义  -DSYSCONFDIR=/etc   --指定MySQL的配置文件存放的目录  -DMYSQL_USER=mysql  --指定启动mysql的用户  用户名可以自己定义 mysql这个用户是否会在编译安装的时候,自动新建?还是需要我们自己去创建? 答案是需要我们自己创建-DDEFAULT_CHARSET=utf8  指定MySQL里的默认的字符集为utf8不指定时默认的字符集:Latin1-DDEFAULT_COLLATION=utf8_general_ci   指定字符集的校对规则COLLATION 排序规则  utf8_general_ci utf8里的排序规则,不区分大小写-DWITH_BOOST=boost_1_59_0  指定boost源码的位置在mysql源码的当前目录下一个叫boost_1_59_0的文件夹boost 是什么?Boost提供免费的经过同行评审的可移植C ++源库。  boost这个软件是 c++的支持

5,编译安装(需要很久,如果虚拟机配置不够好,最好不要接 -j 2 ,可能会卡死)

make -j 2 && make install

6,进入安装目录,关闭防火墙和selinux

[root@localhost mysql-5.7.29]# cd /usr/local/sc_mysql[root@localhost sc_mysql]# lsbin   include  LICENSE  mysql-test  README-test  support-filesdocs  lib      man      README      share[root@localhost sc_mysql]# getenforceEnforcing#临时关闭selinux[root@localhost sc_mysql]# setenforce 0[root@localhost sc_mysql]# service firewalld stopRedirecting to /bin/systemctl stop firewalld.service#关闭防火墙的开机自启[root@localhost sc_mysql]# systemctl disable firewalldRemoved symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.#永久关闭 将enforcing 改位disabled[root@localhost sc_mysql]# vim /etc/sysconfig/selinux/config#或者 sed -i 's/enforcing/disabled' /etc/sysconfig/selinux/config

mysql的初始化操作

[root@localhost sc_mysql]# cd bin[root@localhost bin]# lsinnochecksum       mysqladmin                  mysqld_multi      mysqlpump                  mysql_upgradelz4_decompress     mysqlbinlog                 mysqld_safe       mysql_secure_installation  mysqlxtestmyisamchk          mysqlcheck                  mysqldump         mysqlshow                  perrormyisam_ftdump      mysql_client_test           mysqldumpslow     mysqlslap                  replacemyisamlog          mysql_client_test_embedded  mysql_embedded    mysql_ssl_rsa_setup        resolveipmyisampack         mysql_config                mysqlimport       mysqltest                  resolve_stack_dumpmy_print_defaults  mysql_config_editor         mysql_install_db  mysqltest_embedded         zlib_decompressmysql              mysqld                      mysql_plugin      mysql_tzinfo_to_sql[root@localhost bin]# ls /datals: 无法访问/data: 没有那个文件或目录[root@localhost bin]# ./mysql --initialize --user=mysql --basedir=/usr/local/sc_mysql/ --datadir=/data/mysqlmysqld: Can't create directory '/data/mysql/' (Errcode: 2 - No such file or directory)2020-10-06T02:23:39.255295Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).2020-10-06T02:23:39.270889Z 0 [ERROR] Aborting#出错原因:没有/data/mysql 这个目录#出错的解决方法:新建该文件夹,并给他赋予权限[root@localhost bin]# mkdir /data/mysql -p[root@localhost bin]# chown mysql:mysql /data/mysql[root@localhost bin]# chmod 750 /data/mysql/再执行[root@localhost bin]# ./mysqld --initialize --user=mysql --basedir=/usr/local/sc_mysql/ --datadir=/data/mysql2020-10-06T02:26:49.252101Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).2020-10-06T02:26:50.036421Z 0 [Warning] InnoDB: New log files created, LSN=457902020-10-06T02:26:50.130409Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.2020-10-06T02:26:50.189169Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 63d02d8d-077b-11eb-b65c-000c293ff2d9.2020-10-06T02:26:50.190548Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.2020-10-06T02:26:50.939009Z 0 [Warning] CA certificate ca.pem is self signed.2020-10-06T02:26:51.128481Z 1 [Note] A temporary password is generated for root@localhost: sDg;ks3/y:pD#最后一行是临时密码,用于第一次登陆

修改环境变量,复制mysql.server 文件(即mysqld的启动脚本到/etc/init.d 配置文件下 )

[root@localhost bin]# PATH=$PATH:/usr/local/sc_mysql/bin[root@localhost bin]# cd ..[root@localhost sc_mysql]# lsbin  docs  include  lib  LICENSE  man  mysql-test  README  README-test  share  support-files[root@localhost sc_mysql]# cp support-files/mysql.server /etc/init.d/mysqld[root@localhost sc_mysql]# service mysqld start Starting MySQL.2020-10-06T03:01:07.813030Z mysqld_safe error: log-error set to '/var/log/mariadb/mariadb.log', however file don't exists. Create writable for user 'mysql'. ERROR! The server quit without updating PID file (/var/lib/mysql/localhost.localdomain.pid).#出错原因,存在mariadb的配置文件,先清空,再添加新的配置内容[root@localhost sc_mysql]# >/etc/my.cnf[root@localhost sc_mysql]# cat /etc/my.cnf[mysqld_safe][client]socket=/data/mysql/mysql.sock[mysqld]socket=/data/mysql/mysql.sockport = 3309open_files_limit = 8192innodb_buffer_pool_size = 512M[mysql]auto-rehashprompt=\\u@\\d \\R:\\m  mysql>

配置文件详解

[mysqld_safe]   ----对应mysqld_safe进程,父进程[client]socket=/data/mysql/mysql.sock  ---指定socket文件存放的路径,让mysqld进程与客户端执行的mysql命令进程通信[mysqld]    ----对应mysqld进程  子进程 当用kill -9 杀死mysqld 进程后 父进程mysqld_safe 会自动创建一个新的mysqld子进程socket=/data/mysql/mysql.sock   --两个地方都要写,socket是进程与进程之间通信的一种方式port = 3306  -----指定端口号open_files_limit = 8192    ------指定打开的最大文件数innodb_buffer_pool_size = 512M   ----默认存储引擎的大小--最大可以达到物理内存的80%character-set-server=utf8  ----指定字符集utf8[mysql]  -------- 对应客户端mysql命令产生的进程auto-rehash   ----支持tab键自动补齐prompt=\\u@\\d \\R:\\m  mysql>       ---- 提示符  u:用户 d:当前在哪个库(database)\\R:\\m 当前时间innodb 是mysql的存储引擎,简单来讲 就是mysql的一个模块,实现的功能就是将mysql在内存里的数据写到磁盘,或将磁盘里的数据读取到内存里存储引擎的必要性:停电后/服务器异常关闭,内存里的数据会丢失,但磁盘里 的数据是永久写入的,不会丢失buffer 缓存 :mysql 产生的数据临时存放的地方

启动服务

[root@localhost sc_mysql]# service mysqld start Starting MySQL.Logging to '/data/mysql/localhost.localdomain.err'.. SUCCESS! #设置mysqld开机启动[root@localhost sc_mysql]#chkconfig --add mysqld#可以用chkconfig --list 查看mysqld是否开机启动[root@localhost ~]# chkconfig --list注:该输出结果只显示 SysV 服务,并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。       要列出 systemd 服务,请执行 'systemctl list-unit-files'。      查看在具体 target 启用的服务请执行      'systemctl list-dependencies [target]'。mysqld         	0:关	1:关	2:开	3:开	4:开	5:开	6:关netconsole     	0:关	1:关	2:关	3:关	4:关	5:关	6:关network        	0:关	1:关	2:开	3:开	4:开	5:开	6:关#可以看到3和5是开启的#linux的运行级别#0:关机1:单用户2:多用户3:字符界面4:没使用5:图形界面6:重启[root@localhost sc_mysql]# ps aux|grep mysqldroot      33036  0.1  0.0  11820  1616 pts/0    S    11:15   0:00 /bin/sh /usr/local/sc_mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/localhost.localdomain.pidmysql     33178  5.3  5.1 2025908 200384 pts/0  Sl   11:15   0:01 /usr/local/sc_mysql/bin/mysqld --basedir=/usr/local/sc_mysql --datadir=/data/mysql --plugin-dir=/usr/local/sc_mysql/lib/plugin --user=mysql --log-error=localhost.localdomain.err --open-files-limit=8192 --pid-file=/data/mysql/localhost.localdomain.pid --socket=/data/mysql/mysql.sock --port=3309root      33210  0.0  0.0 112824   980 pts/0    S+   11:15   0:00 grep --color=auto mysqld#可看到mysql有两个进程,则为编译安装的,一个的话是rpm安装的#编译安装的mysql的端口号可以自己指定,eg:3309(可在配置文件中指定端口号)#注:更改配置文件需要重新刷新服务:service mysqld restart

进入mysql,并修改密码

[root@localhost sc_mysql]# mysql -uroot -p'sDg;ks3/y:pD'mysql: [Warning] Using a password on the command line interface can be insecure.Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 2Server version: 5.7.29Copyright (c) 2000, 2020, 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@(none) 11:17  mysql>alter user 'root'@'localhost' identified by 'Sanchuang123#';Query OK, 0 rows affected (0.00 sec)root@(none) 11:19  mysql>

安装完毕!

接下来,可以将上面的命令可以写成脚本,方便以后使用,实现一键安装

[root@localhost ~]# cat onekey_compile_install_mysql.sh #!/bin/bash#author:zwx#time: 2020-10-6#QQ:2624551985#####################################编译安装mysql 5.7.29#os: centos7.8.2003 #####################################新建用户mysqluseradd  -s /sbin/nologin  mysql#解决软件的依赖关系yum  install cmake ncurses-devel gcc  gcc-c++  vim  lsof bzip2 openssl-devel -y#解压rpm包rpm -ivh mysql-community-5.7.29-1.el7.src.rpm #进入/root/rpmbuild/SOURCES目录cd  /root/rpmbuild/SOURCES#解压真正的源码包tar xf mysql-5.7.29.tar.gztar xf boost_1_59_0.tar.bz2#将boost包移动到mysql解压的包里,并进入mysql 目录mv boost_1_59_0  mysql-5.7.29cd mysql-5.7.29#编译前的配置cmake  -DCMAKE_INSTALL_PREFIX=/usr/local/sc_mysql -DMYSQL_DATADIR=/data/mysql  -DSYSCONFDIR=/etc  -DMYSQL_USER=mysql  -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci  -DWITH_BOOST=boost_1_59_0##编译和编译安装make -j 2 && make install#关闭防火墙firewalldservice firewalld stop#不让防火墙开机自启 systemctl  disable firewalld#关闭selinux#临时关闭selinux#永久关闭selinuxsetenforce 0 sed  -i  's/enforcing/disabled/' /etc/selinux/config #mysql的初始化操作mkdir /data/mysql -pchown mysql:mysql /data/mysql/chmod 750 /data/mysql/cd /usr/local/sc_mysql/bin./mysqld  --initialize --user=mysql --basedir=/usr/local/sc_mysql/  --datadir=/data/mysql  &>passwd.txt #获得临时密码tem_passwd=$(cat passwd.txt |grep "temporary"|awk '{print $NF}')  #$NF表示最后一个字段  # abc=$(命令)  优先执行命令,然后将结果赋值给abc #修改环境变量,添加我们编译安装的MySQL的可执行命令的路径#只在当前终端有效PATH=$PATH:/usr/local/sc_mysql/bin#在新的终端生效echo  "PATH=$PATH:/usr/local/sc_mysql/bin" >>/root/.bashrc#复制mysql提供的启动mysqld服务的脚本到/etc/init.d目录下-->复制mysqld的启动脚本cp ../support-files/mysql.server  /etc/init.d/mysqld#生成/etc/my.cnf配置文件cat  >/etc/my.cnf  <
EOF#启动mysqld服务service mysqld start#设置开机启动chkconfig --add mysqld#登录重新设置初始密码为Sanchuang123##初次修改密码需要使用--connect-expired-password 选项mysql -uroot -p$tem_passwd --connect-expired-password -e "set password='Sanchuang123#';"#验证密码是否设置成功mysql -uroot -pSanchuang123# -e 'show databases;' && echo "database is installed success"

常见问题

关闭mysql

再登录mysql,会报错 找不到sock文件

[root@localhost ~]# mysql -uroot -p'Sanchuang123#'mysql: [Warning] Using a password on the command line interface can be insecure.ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

socket 是进程与进程之间通信的一种方式

进程与进程之间通信的方式包括:
1,信号
2,信号量
3,管道
4,消息队列
5,共享内存
6,socket套接字

mysqld进程与socket文件之间的关系

mysqld(服务器端)--------------- >

(/var/lib/mysql/mysql.sock) 该文件有mysqld拥有(mysqld进程启动,就会存在这个文件,mysqld进程关闭,该文件就会消失)
------------>mysql(客户端的命令)

/var/lib/mysql 是mysql 的数据文件

转载地址:http://yqlzi.baihongyu.com/

你可能感兴趣的文章
Asp.Net+Jquery.Ajax详解5-$.getScript
查看>>
Asp.Net+Jquery.Ajax详解6-$.ajaxSetup
查看>>
Asp.Net+Jquery.Ajax详解7-全局Ajax事件
查看>>
J2EE总结(宏观把握)
查看>>
什么是Dojo?与Jquery宏观对比,结果如何?
查看>>
Asp.Net+Jquery.Ajax详解8-核心$.ajax
查看>>
我的工作日志2
查看>>
我的工作日志5
查看>>
aspx上传、预览图片
查看>>
我的工作日志6
查看>>
我的软件工程之路(五)—四个月总结
查看>>
从入职到离职的收获——ICT四个月
查看>>
项目中用到的一个导入Excel的方法
查看>>
项目中一个用于导出word的方法
查看>>
项目中用到小技术点
查看>>
管理数据库连接不得不注意的地方
查看>>
KS系统总结
查看>>
测试Jsp 静态包含和动态包含
查看>>
简析几种常用的Web监听
查看>>
Web应用过滤器Fileter
查看>>