MySQL數據庫
數據庫管理系統的優點 :
相互關聯的數據的集合 ?
較少的數據冗余 ?
程序與數據相互獨立 ?
保證數據的安全、可靠 ?
最大限度地保證數據的正確性 ?
數據可以并發使用并能同時保證一致性
數據庫管理系統的基本功能 :
數據定義 ?
數據處理 ?
數據安全 ?
數據備份
數據庫系統的架構 ;
單機架構 ?
大型主機/終端架構 ?
主從式架構(C/S) ?
分布式架構
事務transaction:多個操作被當作一個整體對待
A: 原子性
C:一致性
I: 隔離性
D:持久性
MariaDB的特性;
插件式存儲引擎
單進程,多線程 ?
諸多擴展和新特性 ?
提供了較多測試組件 ?
開源
安裝Mariadb :(端口系統默認為3306)
centos7系統上默認用的是mariadb,centos6系統上用的是mysql,他們之間本質上是沒有區別的。
Mariadb安裝方式:
檢查環境
iptables
selinux
mariadb-server (查看系統上是否已經安裝過mariadb包了)
1、源代碼:編譯安裝
1 . 下載源碼;上圖的官網里下載:https://downloads.mariadb.org/mariadb/10.2.15/
2 . 安裝編譯所需要的的包:
yum install bison bison-devel zlib-devel libcurl-devel libarchive-devel boostdevel gcc gcc-c++ cmake libevent-devel gnutls-devel libaio-devel openssldevel ncurses-devel libxml2-devel
3 . useradd -r -s /sbin/nologin mysql? (創建用戶)
4 . 將源碼解壓縮:tar xvf mariadb-10.2.15.tar.gz
5 .?mkdir -pv /data/mysqldb ? ? ? ? ?chown mysql.mysql /data/mysqldb ?? (創建數據庫的目錄,并指定其所有者和所有組)
6 . 將解壓縮的源碼進行編譯:
cd mariadb-10.2.15/(要先進入到源碼解壓縮后的文件夾下)
cmake . \
-DCMAKE_INSTALL_PREFIX=/app/mysql \? (程序安裝路徑)
-DMYSQL_DATADIR=/data/mysqldb/ \ ? ?? (庫文件存放路徑)
-DSYSCONFDIR=/etc \
-DMYSQL_USER=mysql \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITHOUT_MROONGA_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_UNIX_ADDR=/app/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
(執行此命令一定要按照上述格式來執行)
7 . make – j? 4? &&? make? install ? ? (開始編譯安裝)
8 .準備環境變量
echo ‘PATH=/app/mysql/bin:$PATH’ > /etc/profile.d/mysql.sh? (將編譯的二進制程序目錄添加到PATH變量里去)
. /etc/profile.d/mysql.sh (讓PATH變量生效)
9 . 生成數據庫文件
cd /app/mysql/? (進到此目錄下)
scripts/mysql_install_db –datadir=/data/mysqldb/ –user=mysql
(執行此腳本,此腳本為生成數據庫的配置文件)
10 .?準備配置文件
cp /app/mysql/support-files/my-huge.cnf /etc/my.cnf
修改/etc/my.cnf的配置文件:
datadir = /data/mysqldb ? ? (添加此行指定其數據庫目錄的路徑)
11 . 準備啟動腳本
cp /app/mysql/support-files/mysql.server /etc/init.d/mysqld
(將編譯好的二進制啟動腳本復制到init.d的啟動管理去。)
setfacl -R -m u:mysql:rwx /app/mysql/? (對mysql用戶增加對/app/mysql/目錄的讀寫執行的權限)
12 . 啟動服務
chkconfig –add mysqld ?? (將mysqld加入到開機啟動項里)
chkconfig? –list ? ? ? ? (查看啟動列表項)
service mysqld start
?
2、二進制格式的程序包:展開至特定路徑,并經過簡單配置后即可使用
1.? 下載二進制包:
https://downloads.mariadb.org/mariadb/10.2.15/ (在此官網就可以下載)
二進制包:mariadb-10.2.15-linux-x86_64.tar (帶有linux而且在400M以上)
2 . 新建用戶?
創建數據庫的用戶賬號:useradd -r -d /app/mysql? -s /sbin/nologin mysql
3 .? 解壓縮:
tar -xvf mariadb-10.2.15-linux-x86_64.tar.gz ? -C /usr/local(此解壓路徑是根據它源碼編譯時指定的路徑,可以到官網上查到)
4 . 進入到cd /usr/local目錄下指定軟連接:ln -s mariadb-10.2.15-linux-x86_64/ mysql 指定好了之后。后面的操作就可以使用mysql,而不是要寫mariadb-10.2.15-linux-x86_64/一長串了。
5 . 進入到mysql目錄下發現所有文件的賬號都是500,所以要將其用戶賬號更改為root所有
回到? /usr/local目錄下更改mysql目錄及目錄下的文件的所有者所屬組:chown -R root: mysql/
在此文件夾下/usr/local/mysql/bin/有許多要執行的文件,需要將其加入到$PATH變量里 ,以后執行不必在寫絕對路徑了。
echo PATH=/usr/local/mysql/bin:$PATH > /etc/profile.d/mysql.sh? (加入$PATH變量里)
. /etc/profile.d/mysql.sh ?? (讓文件生效)
6. 指定以后數據庫存放的路徑:
因為數據庫需要大的存儲空間,可以考慮使用邏輯卷來管理,如果存儲空間不夠的話還可以重新在擴容。
新加一塊虛擬硬盤:同步硬盤:echo ‘- – -‘ > /sys/class/scsi_host/host2/scan
新加的硬盤不用分區,直接創建邏輯卷就可以了。
pvcreate /dev/sdb ?? (變成物理卷)
vgcreate vg0 /dev/sdb? (創建卷組vg0)
lvcreate -n lv_mysql -l 100%FREE vg0(創建邏輯卷lv_mysql,并將卷組的空間全部用完)
mkfs.xfs ? /dev/vg0/lv_mysql ?? (創建文件系統)
創建文件夾(此文件夾為,剛才創建用戶時指定的家目錄)mkdir? /app/
并掛載到剛剛創建的邏輯卷里:(寫到磁盤里面)
vim /etc/fstab
UUID=2e6b78f8-fefa-451b-aa5f-aa4199367f08 /app/ xfs defaults 0 0
mount? -a? (讓掛載生效)
mkdir /app/mysqldb? (將文件夾建立起來)
chown mysql.mysql /app/mysqldb ? (將文件夾的所有者和所屬組都改為mysql)
7 . 生成數據庫的必要配置文件
執行一個腳本就可以了,此腳本在mysql的程序文件夾下/usr/local/mysql/scripts
scripts/mysql_install_db –datadir=/app/mysqldb –user=mysql(執行此腳本。并指定生成的配置文件存放的路徑為剛剛創建的數據庫的路徑)? 有0k代表執行成功了。
執行此腳本必須要在/usr/local/mysql? 此目錄下因為此腳本有依賴。
8 . 修改配置文件,告訴數據庫存放的路徑:
/usr/local/mysql/support-files/my-huge.cnf? (大環境下使用,但只有2G)
cp /usr/local/mysql/support-files/my-huge.cnf /etc/my.cnf? (將二進制程序里的模板文件復制到mysql的配置文件下修改)
vim? /etc/my.cnf
9 . 啟動服務:(將二進制程序里的啟動腳本復制出來,到init.d里使其變成服務腳本)
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig –add mysqld(將服務腳本加到啟動程序里)
可以通過chkconfig? –list ? 來查看是否添加到啟動程序里了。
手動開啟服務即可:service mysqld start? (如果起不來直接啟程序;./mysqld ? start )
3、程序包管理器管理的程序包安裝。
1 . 本身光盤里有mariadb的rpm包,只需用yum 安裝一下就可以了:
此包為系統自帶的版本,版本較低
yum? install? mariadb-server? (服務端)裝好后連客戶端一起安裝了(yum install mariadb)
systemctl? start mariadb ? (啟動服務)
systemctl? stop? mariadb ? (暫停服務)
mysql? (進入數據庫) ? ? ?? quit/exit? (退出數據庫)
2. 到官網安裝:(已配好了的yum源復制過來建個倉庫就可以了)
可以安裝最新的版本。
https://downloads.mariadb.org/mariadb/repositories/ ? (官網地址)
將yum源復制到自己所配的倉庫里,然后安裝就可以了.
yum? install? MariaDB ? (注意大小寫就可以了,查看外網是否通)
安裝完啟動服務就可以了:systemctl ? start ? mariadb
在系統里如果光盤里有mariadb的老版本和新的yum版本,會默認安裝最新的版本。
實驗:mysql(mariadb)多實例安裝: (既在一臺主機上安裝多個數據庫)
由于mysql使用的都是默認的3306端口,所以在安裝多個數據庫時要將其端口修改一下。
1 . 首先yum 安裝一個mariadb ;yum install mariadb
2 . 創建目錄來存放三個實例:
mkdir /mysqldb/{3306,3307,3308}/{etc,socket,pid,log,data} -pv? (創建每個實例所需的文件夾)
目錄結構:
/mysql/
├── 3306
│?? ├── data
│?? ├── etc
│?? ├── log
│?? ├── pid
│?? └── socket
├── 3307
│?? ├── data
│?? ├── etc
│?? ├── log
│?? ├── pid
│?? └── socket
└── 3308
├── data ? (此目錄是存放數據庫文件)
├── etc ? ?? (存放配置文件的)
├── log ? ? ?? (存放日志文件的)
├── pid
└── socket ?? (存放socket文件的)
3 .? 由于yum已經安裝了mariadb ,所以mysql用戶已經建立了。
chown -R mysql.mysql /mysqldb/ ? (將剛才創建的文件夾的所有者和所屬組都設為mysql)
4 .創建數據庫的配置文件:
mysql_install_db –datadir=/mysqldb/3306/data –user=mysql ? ? ? (創建3306的)
mysql_install_db –datadir=/mysqldb/3307/data –user=mysql ? ? ? ? ?? (創建3307的)
mysql_install_db –datadir=/mysqldb/3308/data –user=mysql ? ? ? ? ? ? (創建3308的)
如果是二進制安裝或編譯安裝: 需要在后面添加 –basedir= xxxx
xxx需要在連接mysql 后輸入show variables like ‘%basedir%’;? 來查看路徑。
如果是二進制安裝或者編譯安裝,執行此條命令要進入到mysql_install_db此腳本的上級目錄,如何查找他的路徑請看上面兩種安裝時此腳本呢的具體路徑。
5 .? 創建/etc /的配置文件;默認路徑在/etc/my.cnf
cp /etc/my.cnf /mysqldb/3306/etc/
cp /etc/my.cnf /mysqldb/3307/etc/
cp /etc/my.cnf /mysqldb/3308/etc/
然后修改配置文件:
vim ? /mysqldb/3306/etc/my.cnf
vim /mysqldb/3307/etc/my.cnf
vim ? /mysqldb/3308/etc/my.cnf
然后將每個文件都 按下圖來修改:
6 .?cp mysqld /mysqldb/3306/(將事先準備好的腳本復制到各個目錄下)
cp mysqld /mysqldb/3306/
cp mysqld /mysqldb/3307/
cp mysqld /mysqldb/3308/
然后將復制過去的腳本文件修改一下對應的端口號就可以了。(如果是編譯安裝或者是二進制安裝,此腳本還要將目錄更改一下cmd_path=”/app/mysql/bin”? 此地址為自己編譯安裝時的bin的地址)
7 . 將系統已有的服務暫停;
systemctl stop mariadb
給各個腳本添加執行權限:
chmod 700 /mysqldb/3306/mysqld
chmod 700 /mysqldb/3307/mysqld
chmod 700 /mysqldb/3308/mysqld
最后走一遍啟動腳本:
/mysqldb/3306/mysqld start ?? (stop 為停止)
/mysqldb/3307/mysqld start
/mysqldb/3308/mysqld start
服務啟動之后;連接實例;由于實例的socket文件不在默認的路徑,所以直接mysql無法連接實例
只有這樣:mysql -S /mysqldb/3308/socket/mysql.sock? (連接)
(多實例中的兩個重要的配置文件要改對:/mysqldb/3306/mysqld此腳本文件和/mysqldb/3306/etc/my.cnf)
安全加固腳本:
mysiql服務安裝好后,由于沒有設置密碼,需要跑一個腳本來設定密碼。
nmysql_secure_installation? (開啟服務之后運行此腳本)
是否設置root口令 y
是否刪除匿名用戶 y
是否允許root遠程登錄 運行此腳本,交互式
是否刪除test數據庫 y
privilege tables y
以下為mysqld的腳本詳細。
#!/bin/bash
port=3307
mysql_user=”root”
mysql_pwd=””
cmd_path=”/usr/bin”
mysql_basedir=”/mysqldb”
mysql_sock=”${mysql_basedir}/${port}/socket/mysql.sock”
function_start_mysql()
{
if [ ! -e “$mysql_sock” ];then
printf “Starting MySQL…\n”
else
printf “MySQL is running…\n”
exit
fi
}
function_stop_mysql()
{
if [ ! -e “$mysql_sock” ];then
if [ ! -e “$mysql_sock” ];then
printf “Starting MySQL…\n”
${cmd_path}/mysqld_safe –defaults-file=${mysql_basedir}/${port}/etc/my.cnf &> /dev/null &
else
printf “MySQL is running…\n”
exit
fi
}
function_stop_mysql()
{
if [ ! -e “$mysql_sock” ];then
printf “MySQL is stopped…\n”
exit
else
printf “Stoping MySQL…\n”
${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown
fi
}
function_restart_mysql()
{
printf “Restarting MySQL…\n”
function_stop_mysql
sleep 2
function_start_mysql
}
case $1 in
start)
function_start_mysql
;;
stop)
function_stop_mysql
;;
restart)
function_restart_mysql
;;
*)
printf “Usage: ${mysql_basedir}/${port}/bin/mysqld {start|stop|restart}\n”
esac
二進制自動安裝腳本:
此腳本里有讓環境變量生效的. /etc/profile.d/mysql.sh 如果只是普通的執行腳本的話此環境變量只在腳本里生效,當腳本執行完了退出后之后此文件并不能生效。所以在執行腳本時用source mariadb.sh執行后就會在全局生效了。
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/100334
將事先準備好的腳本復制到各個目錄下?請問是哪個腳本,沒寫明,