linux下各數據庫安裝及相關知識

這一部分主要講mysql , mongodb 和 redis的安裝和相關操作。這三個在我的程序中都有用到,分別代表了關係型數據庫,非關係型數據庫,內存key-value數據庫

1. MySQL


1.1 安裝

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install mysql-server
$ sudo apt-get install mysql-client

在安裝的時候會提示你要輸入密碼什麼的,按照提示來就行了

1.2 數據庫備份,導出和導入

我原先的打算是最好能夠讓win和linux下的mysql公用一個存儲文件,這樣在兩個系統上可以同步使用數據,而不需要同步。不過在反覆嘗試以後發現並不行,因此只能按照網上的方法,現將win下的數據使用mysqldump拷貝出來,然後在linux下導入。
具體的流程如下:

一. 導出
首先進入win, 確認此時mysqld進程已經開啓,然後輸入

mysqldump -u root --default-character-set=utf8 DB_NAME > DB_PACK_PATH

在上述命令中,-u root 表示登陸的用戶
--default-character-set=utf8是一個可選參數,表示使用的字符集
最後的DB_NAME表示要導出的database名字,DB_PACK_PATH是目標文件路徑,其中後綴名是隨意的
如果只想要導出db中的某個表,則可以

mysqldump -u root --default-character-set=utf8 DB_NAME TABLE_NAME > DB_PACK_PATH

注意,上述操作一定要在cmd中運行,而不可在powershell中運行!在ps中導出的文件在導入的時候會提示ascii碼錯誤什麼的。

二. 導入
此時進入linux系統,首先進入mysql, 然後建立對應的database. 比如說,我想導入一個名字叫microblog的庫,則首先要create database microblog建立對應的空白數據庫
如果對於數據庫的字符集有特定的要求,可以輸入show create database DB_NAME;來查看編碼。

這裏寫圖片描述

如果想修改,可以使用alter database DB_NAME default character set utf8;
之後,使用use DB_NAME ;進入對應的數據庫, 然後使用source DB_PATH ; 來導入。這種方法的原理就是一條條insert. 據說mysqldump -u root -p DB_NAME < DB_PACK_PATH速度會很快,不過我並沒有試過。

1.3 GUI

一開始打算用的navicat, 不過始終出現亂碼,又要破解,感覺很煩,就用了mysql官方推薦的WorkBench, 感覺還是很好用的。
下載地址是http://dev.mysql.com/downloads/workbench/ 是一個deb包,下完以後使用dpkg -i PACK_NAME安裝,如果報錯,則執行apt-get -f install以後再裝一次即可

1.4 數據庫遷移

所謂數據庫遷移,就是指更換數據庫的數據的位置。有時候磁盤空間有限,難免想要將數據挪到其他盤裏去。而在提具體步驟之前,首先要提一下mysql中的幾個關鍵文件的位置(5.7.13-0ubuntu0.16.04.2)。

這裏寫圖片描述

這些信息都是可以自己修改的。當然了,就目前目標而言,我們主要關注datadir的值。datadir, 顧名思義,就是存放數據的文件夾的路徑。可以看到,默認的datadir = /var/lib/mysql 。你可以把datadir改成自己的目標文件夾。
當然了,修改完datadir以後並不是萬事大吉了,因爲datadir中本身就有一些必要的相關信息,所以要將原來的datadir中的內容拷貝到目標文件夾(也就是新的datadir)中。
也許你覺得這樣就已經結束了。但是如果這時你重新啓動mysql, 會提示報錯,因爲mysql無法訪問新的datadir。 這是由於AppArmor的存在。 AppArmor是一個高效和易於使用的Linux系統安全應用程序。簡單的來講,它能夠控制各軟件能夠訪問的文件範圍。AppArmor的參數文件在/etc/apparmor.d中,裏面包含了各app的相關參數。至於mysql,則在usr.sbin.mysqld中。找到

# Allow data dir access
  /var/lib/mysql/ r,
  /var/lib/mysql/** rwk,

將那兩個路徑替換掉,改成目標文件夾的路徑即可。當然了,也可以不替換,在下面補充新的路徑也是可以的。
修改完配置文件後,運行

$systemctl restart apparmor
$systemctl restart mysql

重啓AppArmor和mysql。 到此才正式完成遷移數據文件夾的步驟

相關資料鏈接:
MySQL如何修改表格的字符集,如何修改某個字段的字符集
將mysql數據從Windows遷移到Linux中


1.5 參數調優

這裏主要參照之前博客的做法, 調節innodb相關的一些參數。
mysql的參數可以通過show variables;來查看。而show variables like "%inno%";可以查看與名字中帶有innodb的變量。參數的位置依舊在 /etc/mysql/mysql.conf.d

這裏寫圖片描述


1.6 報錯的解決辦法

1.6.1 open-files-limit相關

在運行服務器端的過程中,很奇怪的,在IDEA中就可以正常運行,而在shell中跑就會報錯。報的錯誤是MySQL can't open files after updating server: errno: 24 這個錯誤經過查詢後發現,與以下因素有關:

  1. mysql 自身的 open_files_limit 參數
  2. ulimit 中的 open files 參數

前者是mysql自身的約束,而後者是linux系統的約束。

首先來看前者,mysql 的 open_files_limit 值可以登陸客戶端(mysql -u root -p)以後使用
show global variables like "%open%" ;
來查看,一般來講是1024,有時候是不夠用的。想要修改這個值,需要進入/etc/mysql/mysql.conf.d/mysqld.cnf 中修改。直接在[mysqld]項下添加
open_files_limit = 65535
即可。也可以在/etc/mysql/my.cnf中添加。默認情況下,這個文件是空的,需要自己加[mysqld]字段,然後再添加參數,如下圖所示
這裏寫圖片描述
使用systemctl restart mysql重啓以後生效

接下來來看ulimit. ulimit是linux內置的一個應用,能夠控制各個用戶的一些參數,例如能夠打開的文件數,進程數,堆棧的值等等。可以通過 ulimit -a來查看所有內容。注意查詢所得結果根據用戶是不同的,是否是root用戶也可能得到不同的結果。
使用 ulimit -key value 可以臨時的改變這些值,比如說ulimit -n 5000就可以將能夠同時打開的文件改成5000, 但是隻對當前shell有效。想要永久的改變該值,需要去/etc/security/limits.conf中去修改。
這裏寫圖片描述
修改完以後,重啓系統或reboot生效。

相關資料鏈接:
mysql open_file_limits相關設置
mysql非root啓動解除文件句柄的1024限制的注意事項
正確配置Linux系統ulimit值的方法
mysql優化之連接優化(open-files-limit與table_open_cache)
How to permanently raise ulimit ‘open files’ and MySQL ‘open_files_limit’

相關資料

2. MongoDB

apt-get install mongodb
參數文件在/etc/mongodb.cnf中,可以修改datadir和port等信息
gui: 推薦mongobooster

3. Redis

3.1 安裝

按照官網的說法,

$ wget http://download.redis.io/releases/redis-3.2.3.tar.gz
$ tar xzf redis-3.2.3.tar.gz
$ cd redis-3.2.3
$ make

編譯得到的二進制文件在src中
打開服務器端

$ src/redis-server 

打開客戶端

$ src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"
發佈了88 篇原創文章 · 獲贊 591 · 訪問量 147萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章