mysql源码脚本安装


:shell脚本及所需安装包下载地址: mysql源码安装脚本

一、执行脚本前准备工作

1.将cmake-2.8.12.2.tar.gz和mysql-5.6.17.tar.gz上传到/tmp目录下:
[root@localhost ~]# ls /tmp/
cmake-2.8.12.2.tar.gz  mysql-5.6.17.tar.gz
2.在虚拟机设置中勾选“已连接”和选择相应的镜像:

在这里插入图片描述
然后将mysql.sh上传到你的虚拟机执行sh mysql.sh命令

你可能会遇到这个报错:

[root@localhost ~]# sh mysql.sh 
: command not found
: not foundv/cdrom
 does not existint /mnt
: command not found

问题原因:
  DOS下的文本文件是以\r\n作为断行标志的,表示成十六进制就是0D 0A。而Unix下的文本文件是以\n作为断行标志的,表示成十六进制就是0A。DOS格式的文本文件在Linux底下,用较低版本的vi打开时行尾会显示^M,而且很多命令都无法很好的处理这种格式的文件。而Unix格式的文本文件在Windows下用Notepad打开时会拼在一起显示。因此产生了两种格式文件相互转换的需求,对应的将UNIX格式文本文件转成成DOS格式的是unix2dos命令。由于Windows和linux文件换行的不同,可能会导致Windows文件在linux中不可用,反过来也一样。

解决方法一:
首先用vi命令打开文件:[root@localhost test]# vi mysql.sh

在vi命令模式中使用:set ff命令,可以看到改文件的格式为fileformat=dos

修改文件format为unix,使用vi/vim修改文件format。
命令::set ff=unix
或者::set fileformat=unix
然后:wq保存退出就可以了

解决方法二:

[root@localhost ~]# dos2unix mysql.sh 
dos2unix: converting file mysql.sh to UNIX format ...
注:如果没有(如Redhat5.5默认有而Redhat6.5则默认没有该命令)该命令的话用yum -y install dos2unix装一下

  在上述准备工作完成后,我在RedHat5.5和RedHat6.5中直接运行mysql.sh即可。但如果你是在Centos7.2中测试的话还需要再做两个步骤:
(1)将mysql.sh中的第九行改为baseurl=file:///mnt
注:经测试Redhat5.5为file:///mnt/Server,Redhat6.5为file:///mnt/Serverfile:///mnt均可,Centos7.2的话为file:///mnt

(2)执行这条命令时报这个错,所以你在执行mysql.sh之前就把这个问题解决了吧:

[root@h81 scripts]# ./mysql_install_db --user=mysql --basedir=/app/mysql --datadir=/app/mysql/data
FATAL ERROR: please install the following Perl modules before executing ./mysql_install_db:
Data::Dumper

解决:yum -y install autoconf //此包安装时会安装Data:Dumper模块。

  问题解决后执行sh mysql.sh命令后你就可以静静的等待了,可以去睡一觉,醒来之后mysql用源码安装的方式就给你安装好了,是不是很省心啊(我等了差不多三十多分钟吧)。

  脚本执行完后执行mysql -u root -p后输入你的密码mysql即可正常使用mysql了:

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.6.17    |
+-----------+
1 row in set (0.00 sec)

二、补充:将DOS格式文本文件转换成Unix格式

  最简单的用法就是dos2unix直接跟上文件名。格式:dos2unix file

  如果一次转换多个文件,把这些文件名直接跟在dos2unix之后。(注:也可以加上-o参数,也可以不加,效果一样):
格式:dos2unix file1 file2 file3
格式:dos2unix -o file1 file2 file3

  上面在转换时,都会直接在原来的文件上修改,如果想把转换的结果保存在别的文件,而源文件不变,则可以使用-n参数:
格式:dos2unix -n oldfile newfile

  如果要保持文件时间戳不变,加上-k参数。所以上面几条命令都是可以加上-k参数来保持文件时间戳的:
格式:dos2unix -k file
格式:dos2unix -k file1 file2 file3
格式:dos2unix -k -o file1 file2 file3
格式:dos2unix -k -n oldfile newfile
注:unix2dos命令的使用方式与dos2unix命令的类似。

  如下,不加-k时候,因为文件内容被修改,所有modify time更新。使用-k则是保持时间属性不变:

[root@localhost hui]# ls -l --full-time mysql.sh 
-rw-r--r-- 1 root root 2241 2016-09-06 15:33:42.000000000 +0800 mysql.sh
[root@localhost hui]# dos2unix -k mysql.sh 
dos2unix: converting file mysql.sh to UNIX format ...
[root@localhost hui]# ls -l --full-time mysql.sh 
-rw-r--r-- 1 root root 2131 2016-09-06 15:33:42.000000000 +0800 mysql.sh
[root@localhost hui]# unix2dos mysql.sh 
unix2dos: converting file mysql.sh to DOS format ...
[root@localhost hui]# ls -l --full-time mysql.sh 
-rw-r--r-- 1 root root 2131 2017-01-19 21:25:26.000000000 +0800 mysql.sh

特别说明:unix2dos和dos2unix的互相转换
(1)Windows中,文件行尾是以/r/t结束的,其ASCII值为 /r? = 0d /n = 0a,如下用hexdump –C查看文件的十六进制格式。/r/t的ASCII值为 /r? = 0d /n = 0a

[root@localhost hui]# hexdump -C mysql.sh 
00000000  72 6d 20 2d 72 66 20 2f  65 74 63 2f 79 75 6d 2e  |rm -rf /etc/yum.|
00000010  72 65 70 6f 73 2e 64 2f  2a 0d 0a 0d 0a 75 6d 6f  |repos.d/*....umo|

(2)用cat –A显示文件的钟的特殊字符:
注:/r 显示为^M/n 显示为$

[root@localhost hui]# cat -A mysql.sh 
rm -rf /etc/yum.repos.d/*^M$
^M$

(3)用dos2unix将此文件转换成linux的格式,我们可以看到,已转换成功,将/r/n转换成/n

[root@localhost hui]# dos2unix mysql.sh 
dos2unix: converting file mysql.sh to UNIX format ...
[root@localhost hui]# cat -A mysql.sh 
rm -rf /etc/yum.repos.d/*$
$
[root@localhost hui]# hexdump -C mysql.sh 
00000000  72 6d 20 2d 72 66 20 2f  65 74 63 2f 79 75 6d 2e  |rm -rf /etc/yum.|
00000010  72 65 70 6f 73 2e 64 2f  2a 0a 0a 75 6d 6f 75 6e  |repos.d/*..umoun|

三、疑问:用yum和源码安装mysql有啥区别的疑问

  MySQL也可以执行yum -y install mysql*(Redhat/Centos5.5和6.5用yum -y install mysql-server就可以,而Centos7.2还得参考这篇文章在CentOS7中利用yum命令安装mysql,安装完还得用/bin/systemctl stop mysql.service命令启动)来安装的,且更快更方便啊,那用yum和源码安装mysql有啥区别的疑问?

下面是我从网上找的感觉回答这个问题回答比较好的:
  跟做运维的朋友聊天,谈到了yum安装和源码安装哪个好的问题。真没想到,关于这个问题,分歧还挺大的。有的人认为,不用源码安装就不是好的运维,不是好的系统管理员。这帽子扣的有点大了。在此我想说一说我的看法,经常看我博客的,也许知道,前期我写关于服务器的文章,基本上都是源码安装的,后来基本上是用yum安装的,除非yum源里面没有,我才会源码安装。在我看来,yum安装和源码安装,基本上没区别,最终还是生成系统所需求的文件,有什么区别呢?

一、yum安装和源码安装,方式的不同
  1.yum安装是将yum源中的rpm包下载到本地,安装这个rpm包。这个rpm包是别人编译安装好的二进制包。这种方式与其说是安装不如说是,更新来的更确切一点。
  2.源码安装,下载是源码包,要进行编译和安装,编译过程,可以进行参数设定。

二、yum安装和源码安装,优缺点分析
  1.yum安装的优点都很清楚,安装东西,方便快捷,特别是不用考虑包依赖。yum安装的缺点,人为无法干预,不能按需安装。源里面有什么就安装什么,安装的版本也比较低。
  2.源码安装的优缺点:
  源码安装的优点,编译安装过程,可以设定参数,按照需求,进行安装,并且安装的版本,可以自己选择,灵活性比较大。
  源码安装的缺点,由于安装包过新或者是其他问题,导致依赖的包没有,或者版本过低。这个时候就要解决包的依赖问题,linux系统中有的包,一个依赖一个,可能装一个小东西,就要解决一堆包的依赖问题,花很多时间解决包的依赖问题,得不尝失。源码安装的多了,不敢升级系统,因为一升级系统就可能会导致以前手动装的东西,不能用。

  很多做运维的,都认为,源码安装比yum安装的性能要好,根据参数选择安装,肯定比yum装了一大堆要好。这样认为的运维,我只能说,他不懂配置。根本不了解自已装的东西。在我看来,同一版yum安装和源码安装完全是一样的。

  以apache为例吧,这个东西,非常常见的,用做web最广泛的工具之一,源码安装,./configure时候,可以添加很多参数,来实现订制。yum安装也可以,yum安装装了很多apache的模块,有的模块根本用不到,无故浪费系统资源和影响性能。但是我们可以配置httpd.conf啊,不需求的模块,我们可以不LoadModule啊,通过修改配置文件,完全可以实现根源码安装一样的效果。不排除少数软件,安装后,不能修改配置的情况,也就是说安装的时候是多少东西,就是多少东西,没有配置文件不可以配置的。

  我觉得,对于刚接触linux的人来说,源码安装很有必要,这样你可以知道自己在做什么,安装过程中,肯定会遇到很多很多的问题,遇到问题,解决问题。这样才会成长。不要一直都用yum装,如果yum安装出了一点问题,就傻眼了,不知道怎么解决,这样很杯具。
 

四、补充:mysql忘记root密码该怎么办

1.通过安全模式

操作系统:CentOS7
软件版本:mysql-5.7

  直接通过安全模式启动并跳过用户名认证:mysqld_safe --skip-grant-table &

  输入mysql -u root -p后让输密码也直接回车就行,再更新密码输入:update mysql.user set password=password('huiq123') where user='root' and host='localhost';exit;退出。

  再输入如下命令后就可以正常使用了:mysqladmin -u root -p huiq123 shutdown

2.重新安装

操作系统:CentOS7.2
软件版本:mysql-5.7.34

注:你可能重新安装之后,发现安装过程中没有需要设置密码的,那是因为没有完全卸载干净mysql,留下了配置文件。

正确步骤应该是:
(1)停止mysql程序;systemctl stop mysqld
(2)删除mysql的数据文件:rm -rf /var/lib/mysql
(3)重新安装mysql。
 
还可参考:https://www.cnblogs.com/ivictor/p/9243259.html
补充:Windows上的mysql 5.5版本可以参考:https://www.cnblogs.com/rmxd/p/11236736.html
 

五、补充:MySql Host is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’ 解决方法

参考:
MySql Host is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’ 解决方法
MySQL参数max_connect_errors分析释疑

原因:同一个ip在短时间内产生太多(超过mysql数据库max_connection_errors的最大值)中断的数据库连接而导致的阻塞;

解决方法:

  1. 提高允许的max_connection_errors数量(治标不治本):
    ① 进入Mysql数据库查看max_connection_errorsshow variables like '%max_connect_errors%';
    ② 修改max_connection_errors的数量为1000: set global max_connect_errors = 1000;
    ③ 查看是否修改成功:show variables like '%max_connect_errors%';
# 关于某个IP输入了错误密码,MySQL会在performance_schema数据库下的host_cache表中记录。它会累计记录在COUNT_AUTHENTICATION_ERRORS字段,如下所示:
mysql> use performance_schema;
Database changed
mysql> select * from host_cache\G;
*************************** 1. row ***************************
                                        IP: 196.1.1.11
                                      HOST: node03
                            HOST_VALIDATED: YES
                        SUM_CONNECT_ERRORS: 8
                 COUNT_HOST_BLOCKED_ERRORS: 1196
           COUNT_NAMEINFO_TRANSIENT_ERRORS: 0
           COUNT_NAMEINFO_PERMANENT_ERRORS: 0
                       COUNT_FORMAT_ERRORS: 0
           COUNT_ADDRINFO_TRANSIENT_ERRORS: 0
           COUNT_ADDRINFO_PERMANENT_ERRORS: 0
                       COUNT_FCRDNS_ERRORS: 0
                     COUNT_HOST_ACL_ERRORS: 0
               COUNT_NO_AUTH_PLUGIN_ERRORS: 0
                  COUNT_AUTH_PLUGIN_ERRORS: 0
                    COUNT_HANDSHAKE_ERRORS: 413
                   COUNT_PROXY_USER_ERRORS: 0
               COUNT_PROXY_USER_ACL_ERRORS: 0
               COUNT_AUTHENTICATION_ERRORS: 0
                          COUNT_SSL_ERRORS: 0
         COUNT_MAX_USER_CONNECTIONS_ERRORS: 0
COUNT_MAX_USER_CONNECTIONS_PER_HOUR_ERRORS: 0
             COUNT_DEFAULT_DATABASE_ERRORS: 0
                 COUNT_INIT_CONNECT_ERRORS: 0
                        COUNT_LOCAL_ERRORS: 0
                      COUNT_UNKNOWN_ERRORS: 0
                                FIRST_SEEN: 2021-07-29 09:15:30
                                 LAST_SEEN: 2021-07-30 09:14:27
                          FIRST_ERROR_SEEN: 2021-07-29 09:16:08
                           LAST_ERROR_SEEN: 2021-07-30 09:14:37

mysql> show variables like '%max_connect_errors%';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| max_connect_errors | 100   |
+--------------------+-------+
1 row in set (0.18 sec)
mysql> set global max_connect_errors = 1000;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%max_connect_errors%';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| max_connect_errors | 1000  |
+--------------------+-------+
1 row in set (0.01 sec)
  1. 使用mysqladmin flush-hosts 命令清理一下hosts文件(不知道mysqladmin在哪个目录下可以使用命令查找:whereis mysqladmin);
    ① 在查找到的目录下使用命令修改:/usr/bin/mysqladmin flush-hosts -h192.168.1.1 -P3308 -uroot -prootpwd;
    备注:其中端口号,用户名,密码都可以根据需要来添加和修改;配置有master/slave主从数据库的要把主库和从库都修改一遍的(我就吃了这个亏明明很容易的几条命令结果折腾了大半天);
    第二步也可以在数据库中进行,命令如下:flush hosts;
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小强签名设计

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值