ホームページ データベース mysql チュートリアル 在Ubuntu上源码安装MySQL+安装问题解决+安全优化_MySQL

在Ubuntu上源码安装MySQL+安装问题解决+安全优化_MySQL

May 27, 2016 pm 01:45 PM
ソースコード 質問

0.说明

当然,MySQL的安装方法多种多样,在Ubuntu上,你可以采用apt-get的方式安装,这样的好处是:快速方便。基本上,它会帮你解决所有的函数库依赖问题,正常情况下,只要apt-get执行完成,那么MySQL也就可以使用了。

但我更倾向于使用源码的方式来安装MySQL,原因也很简单:除了有详细的官方文档外,你还可以非常清楚地知道你自己在做什么,这点在以后MySQL运行出现问题时将会有很大的帮助!

但即便是按照官方文档来安装,你也会遇到各种各样的问题,这里,我将呈现一个完整的过程给大家,直到完成下面的4个任务:

下载MySQL 5.6

安装准备:安装MySQL依赖函数库

安装与运行MySQL

优化MySQL

(1)账户安全优化

(2)数据库安全优化

我是安装完Ubuntu 15.10后就进行MySQL 5.6的安装,因此非常有参考价值!

1.下载MySQL 5.6

下载地址:http://dev.mysql.com/downloads/mysql/5.6.html

进入该下载地址后,选择:

Linux - Generic (glibc 2.5) (x86, 64-bit), Compressed TAR Archive

Linux - Generic (glibc 2.5) (x86, 32-bit), Compressed TAR Archive

这取决于你用的是32位的还是64位的,这里,我下载的是64位的,下载完成后的包如下:

xpleaf@leaf:~$lsmysql*
mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz
ログイン後にコピー

2.安装准备:安装MySQL依赖函数库

MySQL依赖一个名为libaio的函数库,需要先安装它,否则后面安装MySQL会出现问题。

如下:

xpleaf@leaf:~$sudoapt-cachesearchlibaio#查找libaio的相关信息
xpleaf@leaf:~$sudoapt-getinstalllibaio1#安装libaio1
ログイン後にコピー

这样的话就可以很快安装完libaio函数库了。

3.安装与运行MySQL

(1)分别创建一个名为mysql的用户和用户组

如下:

xpleaf@leaf:~$sudogroupaddmysql
xpleaf@leaf:~$sudouseradd-r-gmysql-s/bin/falsemysql
ログイン後にコピー

-r和-s参数的可以使得mysql这个用户没有登陆你系统的权限,这可以保证系统的安全性。

(2)解包与建立软链接

如下:

[root@leaf~]#cd/usr/local
xpleaf@leaf:/usr/local$sudotarzxvf/home/xpleaf/mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz
xpleaf@leaf:/usr/local$sudoln-s/usr/local/mysql-5.6.28-linux-glibc2.5-x86_64/mysql
ログイン後にコピー

需要知道的是,正常情况下,我们习惯将编译安装的软件放在/usr/local目录下,当然你也可以自行选择,不过还是建议放在这里。

建立软链接的好处是,如果你需要使用mysql的安装目录,就不用去输入一长串的目录名称了,因为我们解压缩后的mysql包的目录,名字很长。

(3)初始化Data目录

解包完MySQL后,MySQL目录中会有一个data目录:

xpleaf@leaf:/usr/local$cdmysql
xpleaf@leaf:/usr/local/mysql$ls-ddata/
data/
ログイン後にコピー

里面包含的是MySQL运行所必需的系统信息,因此我们需要将这些数据初始化,如下:

#修改mysql目录下的所有文件的属主为mysql
xpleaf@leaf:/usr/local/mysql$sudochown-Rmysql.
#修改mysql目录下的所有文件的属组为mysql
xpleaf@leaf:/usr/local/mysql$sudochgrp-Rmysql.
#以mysql用户的身份初始化数据
xpleaf@leaf:/usr/local/mysql$sudoscripts/mysql_install_db--user=mysql
#修改mysql目录下的所有文件的属主为root
xpleaf@leaf:/usr/local/mysql$sudochown-Rroot.
#修改mysql目录下的data目录的属主为mysql
xpleaf@leaf:/usr/local/mysql$sudochown-Rmysqldata
ログイン後にコピー

请务必按照上面的操作进行,至于详细的是什么意思,为什么要这样做,可以参考官方文档,有非常详细的解释:http://dev.mysql.com/doc/refman/5.6/en/data-directory-initialization.html

(4)启动MySQL

如下:

xpleaf@leaf:/usr/local/mysql$sudobin/mysqld_safe--user=mysql&
[1]8365
xpleaf@leaf:/usr/local/mysql$16030814:13:26mysqld_safeLoggingto'/usr/local/mysql-5.6.28-linux-glibc2.5-x86_64/data/leaf.err'.
16030814:13:26mysqld_safeStartingmysqlddaemonwithdatabasesfrom/usr/local/mysql-5.6.28-linux-glibc2.5-x86_64/data
ログイン後にコピー

确认已经开启MySQL服务:

xpleaf@leaf:~$sudonetstat-antup|grepmysqld
tcp600:::3306:::*LISTEN8455/mysqld
ログイン後にコピー

mysql服务确实已经成功启动了!

(5)测试mysql服务

为了使mysql可以更好地在你的系统上运行,建议进行一定的mysql服务测试,如下:

xpleaf@leaf:/usr/local/mysql$sudobin/mysqladminversion
bin/mysqladminVer8.42Distrib5.6.28,forlinux-glibc2.5onx86_64
Copyright(c)2000,2015,Oracleand/oritsaffiliates.Allrightsreserved.

OracleisaregisteredtrademarkofOracleCorporationand/orits
affiliates.Othernamesmaybetrademarksoftheirrespective
owners.

Serverversion5.6.28
Protocolversion10
ConnectionLocalhostviaUNIXsocket
UNIXsocket/tmp/mysql.sock
Uptime:8min36sec

Threads:1Questions:2Slowqueries:0Opens:67Flushtables:1Opentables:60Queriespersecondavg:0.003
ログイン後にコピー

成功了!然后我们再进行下面的操作热热身吧:

#通过mysqladmin关闭mysql服务
xpleaf@leaf:/usr/local/mysql$sudobin/mysqladmin-urootshutdown
#启动mysql服务
xpleaf@leaf:/usr/local/mysql$sudobin/mysqld_safe--user=mysql&

#查看mysql数据库中默认存在的数据库
xpleaf@leaf:/usr/local/mysql$sudobin/mysqlshow
+--------------------+
|Databases|
+--------------------+
|information_schema|
|mysql|
|performance_schema|
|test|
+--------------------+

#查看mysql数据库(注意此mysql数据库是一个实体,与上面的统称不同)中的数据表
xpleaf@leaf:/usr/local/mysql$sudobin/mysqlshowmysql
Database:mysql
+---------------------------+
|Tables|
+---------------------------+
|columns_priv|
|db|
|event|
|func|
|general_log|
|help_category|
|help_keyword|
|help_relation|
|help_topic|
|innodb_index_stats|
|innodb_table_stats|
|ndb_binlog_index|
|plugin|
|proc|
|procs_priv|
|proxies_priv|
|servers|
|slave_master_info|
|slave_relay_log_info|
|slave_worker_info|
|slow_log|
|tables_priv|
|time_zone|
|time_zone_leap_second|
|time_zone_name|
|time_zone_transition|
|time_zone_transition_type|
|user|
+---------------------------+

#查看mysql数据库中的所有user表
xpleaf@leaf:/usr/local/mysql$sudobin/mysql-e"SELECTUser,Host,pluginFROMmysql.user"mysql
+------+-----------+-----------------------+
|User|Host|plugin|
+------+-----------+-----------------------+
|root|localhost|mysql_native_password|
|root|leaf|mysql_native_password|
|root|127.0.0.1|mysql_native_password|
|root|::1|mysql_native_password|
||localhost|mysql_native_password|
||leaf|mysql_native_password|
+------+-----------+-----------------------+
ログイン後にコピー

需要注意的是,上面的这些测试必须要在你已经启动了mysql服务的情况下才去进行操作。同时,如果想知道每一步的详细解释,可以参考官方文档:http://dev.mysql.com/doc/refman/5.6/en/testing-server.html

准确来讲,MySQL是已经成功安装完成了!下面我们再做一些基础的优化,主要是从安全的角度去考虑。

4.优化MySQL

(1)MySQL数据库用户账户安全优化

--默认情况下用户账户很不安全

前面我们在对data目录进行初始化的过程中,其实MySQL就为我们创建了一些mysql账户,这些账户以及它们的权限就在mysql.user这张表中(下面会有操作查看),这里我们要对这些初始化的账户进行说明和必要的管理。

首先,我们以命令行方式进行mysql数据库中,不过在在这步之前,需要知道的是,Ubuntu默认并没有安装mysql的客户端,因此我们需要通过下面的命令来安装:

xpleaf@leaf:~$sudoapt-getinstallmysql-client-core-5.6
ログイン後にコピー

然后再登陆:

xpleaf@leaf:~$mysql
ERROR2002(HY000):Can'tconnecttolocalMySQLserverthroughsocket'/var/run/mysqld/mysqld.sock'(13)
ログイン後にコピー

问题:如果你在进行该操作的时候也出现了上面的错误,那么请按照下面的方法来解决:

xpleaf@leaf:~$sudomkdir/var/run/mysqld
xpleaf@leaf:~$cd/var/run/mysqld/
xpleaf@leaf:/var/run/mysqld$sudotouchmysqld.sock
xpleaf@leaf:/var/run/mysqld$sudochown-Rmysql:mysql/var/run/mysqld/
xpleaf@leaf:/var/run/mysqld$cd
xpleaf@leaf:~$sudobash
root@leaf:~#cd/usr/local/mysql
root@leaf:/usr/local/mysql#exit
xpleaf@leaf:~$sudobash
root@leaf:~#cd/usr/local/mysql
root@leaf:/usr/local/mysql#echosocket=/var/run/msqld/mysqld.sock>>my.cnf
root@leaf:/usr/local/mysql#exit
xpleaf@leaf:~$sudoln-s/var/lib/mysql/mysql.sock/tmp/mysql.sock
ログイン後にコピー

启动MySQL:

xpleaf@leaf:~$cd/usr/local/mysql
xpleaf@leaf:/usr/local/mysql$sudobin/mysqld_safe--user=mysql&
ログイン後にコピー

然后再重新登陆:

xpleaf@leaf:/usr/local/mysql$mysql-uroot
WelcometotheMySQLmonitor.Commandsendwith;or\g.
……

mysql>
ログイン後にコピー

终于可以了!

如果在这一步上遇到跟我上面不一样的情况的,可以给我留言。登陆成功后继续进行下面的操作:

查看默认的用户名:

mysql>selectUser,Host,Passwordfrommysql.user;
+------+-----------+----------+
|User|Host|Password|
+------+-----------+----------+
|root|localhost||
|root|leaf||
|root|127.0.0.1||
|root|::1||
||localhost||
||leaf||
+------+-----------+----------+
6rowsinset(0.00sec)
ログイン後にコピー

从这张表中,我们可以看到有两种用户:

a.root用户:拥有最高权限

b.匿名用户:拥有有限的权限

而至于Host参数,则是说明通过该用户,能够以哪种方式进入mysql数据库中,比如对于root用户,现在的方法都是可以进入mysql数据库中的:

mysql -u root -h localhost

mysql -u root -h leaf

mysql -u root -h 127.0.0.1

mysql -u root -h ::1

匿名用户也是如此,但不管哪一种,其实都是指从本地登陆的意思。

但我们会发现一个问题,就是两种用户中Password一栏都为空,这也就是为什么刚刚我们直接输入一个mysql就可以进入的原因了,默认情况下,root用户和匿名用户都没有密码!

这也就是我们为什么要做基本优化的原因了,因为你不对这些用户做管理,那么谁都可以进行你的数据库,数据库完全将无从谈起!

--账户安全优化1:为root用户创建密码

接下来我们要做的是:

为每一个root用户创建密码

有三种方式可以进行这些操作:

  1. 使用set password语句

    使用update语句

    使用mysqladmin命令

    方式1:使用set password语句

    xpleaf@leaf:~$mysql-uroot-p
    Enterpassword:
    mysql>setpasswordfor'root'@'localhost'=password('123456');
    mysql>setpasswordfor'root'@'127.0.0.1'=password('123456');
    mysql>setpasswordfor'root'@'::1'=password('123456');
    mysql>setpasswordfor'root'@'leaf'=password('123456');
    mysql>flushprivileges;
    ログイン後にコピー

    方式2:使用update语句

    xpleaf@leaf:~$mysql-uroot-p
    Enterpassword:
    mysql>updatemysql.usersetpassword=password('123456')
    ->whereUser='root';
    mysql>flushprivileges;
    ログイン後にコピー

    当然,上面两种方式选一种就可以了。这样的话,我们就为root用户创建了密码,以后在使用root用户登陆到数据库时都需要输入密码,如下:

    xpleaf@leaf:~$mysql-uroot
    ERROR1045(28000):Accessdeniedforuser'root'@'localhost'(usingpassword:NO)
    xpleaf@leaf:/usr/local/mysql$mysql-uroot-p
    Enterpassword:
    ログイン後にコピー

    这时再重新看一下mysql.user表:

    mysql>selectUser,Host,Passwordfrommysql.user;+------+-----------+-------------------------------------------+
    |User|Host|Password|
    +------+-----------+-------------------------------------------+
    |root|localhost|*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9|
    |root|leaf|*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9|
    |root|127.0.0.1|*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9|
    |root|::1|*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9|
    ||localhost||
    ||leaf||
    +------+-----------+-------------------------------------------+
    6rowsinset(0.00sec)
    ログイン後にコピー

    可以看到已经为root用户创建为密码,只是这里显示的是密码被哈希加密后的值。

    --账户安全优化2:为匿名用户创建密码或删除匿名用户

    接下来我们要做的是:

    为匿名用户创建密码或删除匿名用户

    a.为匿名用户创建密码

    与上面的方法相同:

    xpleaf@leaf:~$mysql-uroot-p
    Enterpassword:
    mysql>updatemysql.usersetpassword=password('123456')whereUser='';
    mysql>flushprivileges;
    ログイン後にコピー

    这里我们使用update语句的方法。

    另外注意这里的`flush privileges`语句,这个语句的作用是使我们刚刚修改密码的操作马上生效,而无需重启mysql服务,如果没有使用该语句,同时也没有重启mysql服务,使用新密码重新登陆mysql时会一直提示ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)错误。

    b.删除匿名用户

    如果你觉得匿名用户留着实在没有什么必要的话,也可以直接将其删除:

    shell>mysql-uroot-p
    Enterpassword:(enterrootpasswordhere)
    mysql>DROPUSER''@'localhost';
    mysql>DROPUSER''@'host_name';
    mysql>flushprivileges;
    ログイン後にコピー

    (2)MySQL测试数据库安全优化

    --默认情况下的数据库本身存在安全隐患

    官方文档的说明:

    themysql.dbtable contains rows that permit all accounts to access thetestdatabase and other databases with names that start withtest_

    也就是说mysql.db表中有些行允许所有的用户访问test数据库或以名字test_开头的数据库,虽然这对于测试数据库很方便,但其还是带来了一定的安全隐患,所以我们也要对其进行优化。

    --数据库安全优化:删除test数据库或名字以test开头的数据库

    如下:

    xpleaf@leaf:~$mysql-uroot-p
    mysql>deletefrommysql.dbwheredblike'test%';
    mysql>dropdatabasetest;
    mysql>flushprivileges;
    ログイン後にコピー

    关于基本的安全优化,可以参考官方文档:http://dev.mysql.com/doc/refman/5.6/en/default-privileges.html

    到这里的话本文就结束了,如果你是在Ubuntu上初次编译安装MySQL,只要你按照上面的方法去做,正常情况下是不会出现什么问题的,博主已进行多次测试。

    当然,当你已经完全熟悉这样的一个过程之后,以后编译安装时就不需要再一步步这样去做了,只需要写个一键安装部署的脚本就可以了。

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

    AIヘンタイを無料で生成します。

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 中国語版

    SublimeText3 中国語版

    中国語版、とても使いやすい

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    jQueryがform要素の値を取得できない問題の解決方法 jQueryがform要素の値を取得できない問題の解決方法 Feb 19, 2024 pm 02:01 PM

    jQuery.val() が使用できない問題を解決するには、具体的なコード例が必要です フロントエンド開発者にとって、jQuery の使用は一般的な操作の 1 つです。その中でも、.val() メソッドを使用してフォーム要素の値を取得または設定する操作は、非常に一般的な操作です。ただし、特定のケースでは、.val() メソッドを使用できないという問題が発生する可能性があります。この記事では、いくつかの一般的な状況と解決策を紹介し、具体的なコード例を示します。問題の説明 jQuery を使用してフロントエンド ページを開発する場合、時々次のような問題が発生します。

    クラスタリングアルゴリズムにおけるクラスタリング効果評価問題 クラスタリングアルゴリズムにおけるクラスタリング効果評価問題 Oct 10, 2023 pm 01:12 PM

    クラスタリング アルゴリズムのクラスタリング効果評価問題には、特定のコード例が必要です クラスタリングは、データをクラスタリングすることによって、類似したサンプルを 1 つのカテゴリにグループ化する教師なし学習手法です。クラスタリングアルゴリズムでは、クラスタリングの効果をどのように評価するかが重要な問題となります。この記事では、一般的に使用されるいくつかのクラスタリング効果評価指標を紹介し、対応するコード例を示します。 1. クラスタリング効果評価指標 シルエット係数 シルエット係数は、サンプルの近さや他のクラスタとの分離度を計算することでクラスタリング効果を評価します。

    iPhone の一般的な問題を診断する方法を教えます iPhone の一般的な問題を診断する方法を教えます Dec 03, 2023 am 08:15 AM

    強力なパフォーマンスと多彩な機能で知られる iPhone は、複雑な電子機器によく見られる、時折起こる問題や技術的な困難を免れません。 iPhone の問題が発生するとイライラすることもありますが、通常は警報を発する必要はありません。この包括的なガイドでは、iPhone の使用に関連して最も一般的に遭遇する課題のいくつかをわかりやすく説明することを目的としています。当社の段階的なアプローチは、これらの一般的な問題の解決に役立つように設計されており、機器を最高の動作状態に戻すための実用的な解決策とトラブルシューティングのヒントを提供します。不具合やより複雑な問題に直面している場合でも、この記事はそれらを効果的に解決するのに役立ちます。一般的なトラブルシューティングのヒント 具体的なトラブルシューティング手順を詳しく説明する前に、役立つ情報をいくつか紹介します。

    機械学習モデルの汎化能力の問題 機械学習モデルの汎化能力の問題 Oct 08, 2023 am 10:46 AM

    機械学習モデルの汎化能力には特定のコード例が必要ですが、機械学習の開発と応用がますます普及するにつれて、機械学習モデルの汎化能力に対する注目が高まっています。一般化能力とは、ラベルなしデータに対する機械学習モデルの予測能力を指し、現実世界におけるモデルの適応性としても理解できます。優れた機械学習モデルは、高い汎化能力を備え、新しいデータに対して正確な予測を行うことができる必要があります。ただし、実際のアプリケーションでは、トレーニング セットでは良好なパフォーマンスを示しても、テスト セットや実際のテストでは失敗するモデルに遭遇することがよくあります。

    弱教師学習におけるラベル取得問題 弱教師学習におけるラベル取得問題 Oct 08, 2023 am 09:18 AM

    弱教師あり学習におけるラベル取得問題には、特定のコード例が必要です はじめに: 弱教師あり学習は、トレーニングに弱いラベルを使用する機械学習手法です。従来の教師あり学習とは異なり、弱教師あり学習では、各サンプルに正確なラベルが必要ではなく、より少ないラベルを使用してモデルをトレーニングするだけで済みます。しかし、弱教師あり学習では、弱いラベルから有用な情報をいかに正確に取得するかが重要な問題となります。この記事では、弱教師あり学習におけるラベル取得問題を紹介し、具体的なコード例を示します。弱教師学習におけるラベル獲得問題の紹介:

    ソースコードをオンラインで閲覧できる Web サイト ソースコードをオンラインで閲覧できる Web サイト Jan 10, 2024 pm 03:31 PM

    ブラウザの開発者ツールを使用して、Web サイトのソース コードを表示できます。Google Chrome ブラウザの場合: 1. Chrome ブラウザを開き、ソース コードを表示する Web サイトにアクセスします。2. Web 上の任意の場所を右クリックします。ページに移動して「検査」を選択するか、ショートカット キー Ctrl + Shift + I を押して開発者ツールを開きます; 3. 開発者ツールの上部メニュー バーで、「要素」タブを選択します; 4. HTML と CSS コードを確認するだけですウェブサイトの。

    idea で Tomcat のソースコードを表示する方法 idea で Tomcat のソースコードを表示する方法 Jan 25, 2024 pm 02:01 PM

    IDEA で Tomcat ソース コードを表示する手順: 1. Tomcat ソース コードをダウンロードする; 2. Tomcat ソース コードを IDEA にインポートする; 3. Tomcat ソース コードを表示する; 4. Tomcat の動作原理を理解する; 5. 注意事項; 6. 継続的な学習と更新する; 7. ツールとプラグインを使用する; 8. コミュニティに参加して貢献する。詳細な紹介: 1. Tomcat ソース コードをダウンロードします。ソース コード パッケージは、Apache Tomcat の公式 Web サイトからダウンロードできます。通常、これらのソース コード パッケージは ZIP または TAR 形式などです。

    PHPコードのソースコードを解釈・実行せずにブラウザに表示するにはどうすればよいでしょうか? PHPコードのソースコードを解釈・実行せずにブラウザに表示するにはどうすればよいでしょうか? Mar 11, 2024 am 10:54 AM

    PHPコードのソースコードを解釈・実行せずにブラウザ上に表示するにはどうすればよいでしょうか? PHP は、動的 Web ページの開発に一般的に使用されるサーバー側スクリプト言語です。サーバー上で PHP ファイルが要求されると、サーバーはそのファイル内の PHP コードを解釈して実行し、最終的な HTML コンテンツを表示のためにブラウザーに送信します。ただし、PHP ファイルのソース コードを実行するのではなく、ブラウザーに直接表示したい場合があります。この記事では、PHPコードのソースコードを解釈・実行せずにブラウザ上に表示する方法を紹介します。 PHPでは、次のように使用できます

    See all articles