#CentOS6系統分32位和64位的,要注意是否有lib64(或者32)/security/pam_userdb.so這個認證文件
15.5 使用pure-ftpd搭建ftp服務
#使用pure-ftpd搭建比vsftpd搭建要簡單
pure-ftpd搭建ftp
一、安裝pure-ftpd包(須要epel擴展源)
•yum install -y epel-release
• yum install -y pure-ftpd
二、編輯pure-ftpd配置文件
•
vim /etc/pure-ftpd/pure-ftpd.conf
#找到pureftpd.pdb這行,把行首的#刪除
(pureftpd.pdb是密碼文件)
三、關閉vsftpd服務,開啓pure-ftpd服務(
由於都是監聽21端口的)
• systemctl stop vsftpd
• systemctl start pure-ftpd
四、建立給pure-ftp的用戶使用的目錄
• mkdir /data/ftp
五、建立一個普通用戶pure-ftp
• useradd -u 1010 pure-ftp
六、將/data/ftp的屬主權限改成pure-ftp
• chown -R pure-ftp:pure-ftp /data/ftp
七、建立pure-ftp用戶
• pure-pw useradd ftp_usera -u pure-ftp -d /data/ftp
#useradd指定建立用戶名,-u指定系統用戶,-d指定用戶家目錄;而後設置密碼
[root@xinlinux-03 testuser1]#
pure-pw useradd ftp_usera -u pure-ftp -d /data/ftp
Password:
Enter it again:
八、將用戶密碼轉化成計算機識別的二進制文件
•
pure-pw mkdb
測試:
touch /data/ftp/123.txt
lftp ftp_usera@127.0.0.1
ls
pure-pw用法:
pure-pw list #列出全部的用戶
pure-pw userdel #刪除用戶
pure-pw usermod #更改用戶權限屬性
pure-pw passwd #更改用戶密碼
pure-pw mkdb #轉化用戶密碼文件
15.6擴展
15.7課堂筆記
1、mysql操做
show variables 後面加like(相似grep的用法)模糊匹配
show processlist;(
很重要)
#查看目前的進程數(通常狀況數量在10多個左右,幾十個說明mysql很忙,多是哪裏堵塞了 )
2、mysql用戶管理
對象的owner將權限賦予某個用戶(如:testuser1)
grant select ,update on bd_corp to testuser1 [with grant option ]
1.若是帶了 with grant option
那麼用戶testuser1能夠將select ,update權限傳遞給其餘用戶( 如testuser2)
grant select,update on bd_corp to testuser2
2.若是沒帶with grant option
那麼用戶testuser1不能給testuser2受權
#簡單的說就是將權限傳遞給第三方
受權表使用舉例
#grant用於給增長用戶和建立權限,revoke用於刪除用戶權限。
下面是一些用grant增長用戶和建立權限的例子:
mysql> grant all privileges on *.* to test@localhost identified by 'test' with grant option;
#這句增長一個本地具備全部權限的test用戶(超級用戶),密碼是test。ON子句中的*.*意味着"全部數據庫、全部表"。with grant option表示它具備grant權限。
mysql> grant select,insert,update,delete,create,drop privileges on test.* to test1@'192.168.1.0/255.255.255.0' identified by 'test';
#這句是增長了一個test1用戶,口令是test,可是它只能從C類子網192.168.1鏈接,對test庫有select,insert,update,delete,create,drop操做權限。
用grant語句建立權限是不須要再手工刷新受權表的,由於它已經自動刷新了。
給用戶建立權限還能夠經過直接修改受權表:
mysql> insert into user
values("localhost","test",password("test"),"Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y");
mysql> flush privileges;
這兩句和上面第一句grant的效果是同樣的,也是增長了一個本地的test超級用戶。咱們看到用grant方便多了,並且還不需flush privileges。
mysql> insert into user (host,user,password) values("192.168.1.0/255.255.255.0","test1",PASSWORD("test")); mysql> insert into db values("192.168.1.0/255.255.255.0","test","test1","Y","Y","Y","Y","Y","Y","N","N","N","N") mysql> flush privileges;
#這三句和上面第二句grant的效果也是同樣的,也是增長了一個只能從C類子網192.168.1鏈接,對test庫有select,insert,update,delete,create,drop操做權限的test1用戶,口令是test。要取消一個用戶的權限,使用revoke語句。revoke的語法很是相似於grant語句,除了to用from取代而且沒有identified by和with grant option子句,下面是用revoke刪除用戶權限的例子:
mysql> revoke all on test.* from test1@'192.168.1.0/255.255.255.0';
這句revoke就撤消了上面第二句grant建立的權限,可是test1用戶並無被刪除,必須手工從user表刪除:
mysql> delete from user where user='test1';
mysql> flush privileges;
這樣,test1用戶就完全刪除了。
3、mysql的備份與恢復
#mysqldump只適用於數據量較小的數據庫,當數據量高達上百G等便不適用
#XtraBackup有兩個工具,xtrabackup和innobackex:
xtrabackup自己只能備份innoDB和XtraDB,不能備份MyISAM;
innobackex 本事是Hot Backup 腳本修改而來,同時能夠備份MuISAM和innoDB,
可是備份innoDB須要加讀鎖。
4、innobackupex備份
#增量備份以前必需要先進行一次全量備份
#第一次增量備份須要指定全量備份的時間戳目錄
第二次增量備份須要指定上次增量備份的時間戳目錄便可;
5、擴展
一、mysql5.7root密碼更改
#mysql5.7root有默認密碼,須要重設密碼才能進行mysql操做
設置root密碼的步驟:
1、查看默認密碼
[root@localhost src]# cat /root/.mysql_secret
# The random password set for the root userat Fri Jan 10 20:00:34 2014 (local time): aJqZsA2m
這裏的aJqZsA2m就是生成的root隨機密碼啦
2、登陸mysql
[root@localhost src]# mysql -u root -p
Enter password:
輸入上面的密碼aJqZsA2m登陸,若是你沒有把mysql的路徑加到path裏,那就用絕對路徑,mysql -u root -p還能夠寫成mysql -uroot -paJqZsA2m
3、更改密碼
mysql> SET PASSWORD FOR 'root'@localhost = PASSWORD('123456');
Query OK, 0 rows affected (0.17 sec)
至此,就成功地修改了密碼。
二、MyISAM引擎與InnoDB的優劣(面試可能問到)
主要區別:
一、
MyISAM不支持外鍵,InnoDB支持外鍵
二、
MyISAM鎖表時鎖的是整張表,而InnoDB只能鎖一條記錄
三、
MyISAM不支持事務,
InnoDB支持事務
四、使用select count(*)時
MyISAM最快,由於會記錄和保存到內存裏;而InnoDB,每次select都會從頭至尾去計算,全部會很慢
五、存儲結構 MyISAM每張表都存放在三個文件(frm、MYD、MYI)裏面,而InnoDB全部的表都保存在同一個數據文件或者多個文件中(不是三個)
六、
存儲空間 MyISAM可悲壓縮,存儲空間較小;InnoDB相對MyISAM較大一點,由於要創建緩衝池優化存取速度。
七、移植性:
MyISAM數據以文件形式存在,可直接複製粘貼拷貝;InnoDB數據存儲到專門的表空間文件,沒法複製粘貼拷貝
|
MyISAM |
InnoDB |
存儲結構 |
每張表被存放在三個文件:
- frm-表格定義
- MYD(MYData)-數據文件
- MYI(MYIndex)-索引文件
|
全部的表都保存在同一個數據文件中(也多是多個文件,或者是獨立的表空間文件),InnoDB表的大小隻受限於操做系統文件的大小,通常爲2GB |
存儲空間 |
MyISAM可被壓縮,存儲空間較小 |
InnoDB的表須要更多的內存和存儲,它會在主內存中創建其專用的緩衝池用於高速緩衝數據和索引 |
可移植性、備份及恢復 |
因爲MyISAM的數據是以文件的形式存儲,因此在跨平臺的數據轉移中會很方便。在備份和恢復時可單獨針對某個表進行操做 |
免費的方案能夠是拷貝數據文件、備份 binlog,或者用 mysqldump,在數據量達到幾十G的時候就相對痛苦了 |
事務安全 |
不支持 每次查詢具備原子性 |
支持 具備事務(commit)、回滾(rollback)和崩潰修復能力(crash recovery capabilities)的事務安全(transaction-safe (ACID compliant))型表 |
AUTO_INCREMENT |
MyISAM表能夠和其餘字段一塊兒創建聯合索引 |
InnoDB中必須包含只有該字段的索引 |
SELECT |
MyISAM更優 |
|
INSERT |
鎖表鎖整張表 |
InnoDB更優(鎖表時只能鎖一條記錄) |
UPDATE |
|
InnoDB更優 |
DELETE |
|
InnoDB更優 它不會從新創建表,而是一行一行的刪除 |
COUNT without WHERE |
MyISAM更優。由於MyISAM保存了表的具體行數 |
InnoDB沒有保存表的具體行數,須要逐行掃描統計,就很慢了 |
COUNT with WHERE |
同樣 |
同樣,InnoDB也會鎖表 |
鎖 |
只支持表鎖 |
支持表鎖、行鎖 行鎖大幅度提升了多用戶併發操做的新能。可是InnoDB的行鎖,只是在WHERE的主鍵是有效的,非主鍵的WHERE都會鎖全表的 |
外鍵 |
不支持 |
支持 |
FULLTEXT全文索引 |
支持 |
不支持 能夠經過使用Sphinx從InnoDB中得到全文索引,會慢一點 |
三、mysql配置文件
max_connections最大數通常100就足夠了,
max_allowed_packet #作數據恢復的時候可能用到
四、mysql調優
MySQL調優能夠從幾個方面來作:
1、架構層:
作從庫,實現讀寫分離;
2、系統層次:
增長內存;
給磁盤作raid0或者raid5以增長磁盤的讀寫速度;
能夠從新掛載磁盤,並加上noatime參數,這樣能夠減小磁盤的i/o;
3、MySQL自己調優:
(1) 若是未配置主從同步,能夠把bin-log功能關閉,減小磁盤i/o
(2) 在my.cnf中加上skip-name-resolve,這樣能夠避免因爲解析主機名延遲形成mysql執行慢
(3) 調整幾個關鍵的buffer和cache。調整的依據,主要根據數據庫的狀態來調試。
4、用層次:
查看慢查詢日誌,根據慢查詢日誌優化程序中的SQL語句,好比
增長索引(增長索引很重要)
5、調整幾個關鍵的buffer和cache
1)
key_buffer_size 首先能夠根據系統的內存大小設定它,大概的一個參考值:1G如下內存設定128M;2G/256M; 4G/384M;8G/1024M;16G/2048M.這個值能夠經過檢查狀態值Key_read_requests和 Key_reads,能夠知道key_buffer_size設置是否合理。比例key_reads / key_read_requests應該儘量的低,至少是1:100,1:1000更好(上述狀態值可使用SHOW STATUS LIKE ‘key_read%’得到)。注意:該參數值設置的過大反而會是服務器總體效率下降!
2)
table_open_cache 打開一個表的時候,會臨時把表裏面的數據放到這部份內存中,通常設置成1024就夠了,它的大小咱們能夠經過這樣的方法來衡量: 若是你發現 open_tables等於table_cache,而且opened_tables在不斷增加,那麼你就須要增長table_cache的值了(上述狀態值可使用SHOW STATUS LIKE ‘Open%tables’得到)。注意,不能盲目地把table_cache設置成很大的值。若是設置得過高,可能會形成文件描述符不足,從而形成性能不穩定或者鏈接失敗。
3)
sort_buffer_size 查詢排序時所能使用的緩衝區大小,該參數對應的分配內存是每鏈接獨佔!若是有100個鏈接,那麼實際分配的總共排序緩衝區大小爲100 × 4 = 400MB。因此,對於內存在4GB左右的服務器推薦設置爲4-8M。
4)
read_buffer_size 讀查詢操做所能使用的緩衝區大小。和sort_buffer_size同樣,該參數對應的分配內存也是每鏈接獨享!
5)
join_buffer_size 聯合查詢操做所能使用的緩衝區大小,和sort_buffer_size同樣,該參數對應的分配內存也是每鏈接獨享!
6)
myisam_sort_buffer_size 這個緩衝區主要用於修復表過程當中排序索引使用的內存或者是創建索引時排序索引用到的內存大小,通常4G內存給64M便可。
7)
query_cache_size MySQL查詢操做緩衝區的大小,經過如下作法調整:SHOW STATUS LIKE ‘Qcache%’; 若是Qcache_lowmem_prunes該參數記錄有多少條查詢由於內存不足而被移除出查詢緩存。經過這個值,用戶能夠適當的調整緩存大小。若是該值很是大,則代表常常出現緩衝不夠的狀況,須要增長緩存大小;Qcache_free_memory:查詢緩存的內存大小,經過這個參數能夠很清晰的知道當前系統的查詢內存是否夠用,是多了,仍是不夠用,咱們能夠根據實際狀況作出調整。通常狀況下4G內存設置64M足夠了。
8)
thread_cache_size 表示能夠從新利用保存在緩存中線程的數,參考以下值:1G —> 8 2G —> 16 3G —> 32 >3G —> 64
除此以外,還有幾個比較關鍵的參數:
9)
thread_concurrency 這個值設置爲cpu核數的2倍便可
10)
wait_timeout 表示空閒的鏈接超時時間,默認是28800s,這個參數是和interactive_timeout一塊兒使用的,也就是說要想讓wait_timeout 生效,必須同時設置interactive_timeout,建議他們兩個都設置爲10
11)
max_connect_errors 是一個MySQL中與安全有關的計數器值,它負責阻止過多嘗試失敗的客戶端以防止暴力破解密碼的狀況。與性能並沒有太大關係。爲了不一些錯誤咱們通常都設置比較大,好比說10000
12)
max_connections 最大的鏈接數,根據業務請求量適當調整,設置500足夠
13)
max_user_connections 是指同一個帳號可以同時鏈接到mysql服務的最大鏈接數。設置爲0表示不限制。一般咱們設置爲100足夠
五、mysqldump和binlog備份恢復某個庫/表(要了解)
#binlog是實時記錄數據
mysqldump備份時可使用,避免過程當中全局鎖表致使
mysqldump全量備份+mysqlbinlog二進制日誌增量備份
從mysqldump備份文件恢復數據會丟失掉從備份點開始的更新數據,因此還須要結合mysqlbinlog二進制日誌增量備份。確保my.ini或者my.cnf中包含下面的配置以啓用二進制日誌,或者mysqld —log-bin:
[mysqld]
log-bin=mysql-bin
mysqldump命令必須帶上
–flush-logs選項以生成新的二進制日誌文件:
mysqldump --single-transaction --flush-logs --master-data=2 > backup.sql
這樣生成的增量二進制日誌文件好比爲mysql-bin.000003,那麼恢復數據時以下:
shell> mysql -uroot -pPwd < backup_sunday_1_PM.sql
shell> mysqlbinlog mysql-bin.000003 | mysql -uroot -pPwd
此外mysqlbinlog還能夠指定–start-date、–stop-date、–start-position和–stop-position參數,用於精確恢復數據到某個時刻以前或者跳過中間某個出問題時間段恢復數據,直接摘錄MySQL文檔說明中相關內容以下:
5.9.3.1. 指定恢復時間
對於MySQL 4.1.4,能夠在mysqlbinlog語句中經過--start-date和--stop-date選項指定DATETIME格式的起止時間。舉例說明,假設在今天上午10:00(今天是2005年4月20日),執行SQL語句來刪除一個大表。要想恢復表和數據,你能夠恢復前晚上的備份,並輸入:
mysqlbinlog --stop-date="2005-04-20 9:59:59" /var/log/mysql/bin.123456 \
| mysql -u root -pmypwd
#該命令將恢復截止到在--stop-date選項中以DATETIME格式給出的日期和時間的全部數據。若是你沒有檢測到幾個小時後輸入的錯誤的SQL語句,可能你想要恢復後面發生的活動。根據這些,你能夠用起使日期和時間再次運行mysqlbinlog:
mysqlbinlog --start-date="2005-04-20 10:01:00" /var/log/mysql/bin.123456 \
| mysql -u root -pmypwd \
#在該行中,從上午10:01登陸的SQL語句將運行。組合執行前夜的轉儲文件和mysqlbinlog的兩行能夠將全部數據恢復到上午10:00前一秒鐘。你應檢查日誌以確保時間確切。下一節介紹如何實現。
5.9.3.2. 指定恢復位置
也能夠不指定日期和時間,而使用mysqlbinlog的選項--start-position和--stop-position來指定日誌位置。它們的做用與起止日選項相同,不一樣的是給出了從日誌起的位置號。使用日誌位置是更準確的恢復方法,特別是當因爲破壞性SQL語句同時發生許多事務的時候。要想肯定位置號,能夠運行mysqlbinlog尋找執行了不指望的事務的時間範圍,但應將結果從新指向文本文件以便進行檢查。操做方法爲:
mysqlbinlog --start-date="2005-04-20 9:55:00" --stop-date="2005-04-20 10:05:00" \
/var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
#該命令將在/tmp目錄建立小的文本文件,將顯示執行了錯誤的SQL語句時的SQL語句。你能夠用文本編輯器打開該文件,尋找你不要想重複的語句。若是二進制日誌中的位置號用於中止和繼續恢復操做,應進行註釋。用log_pos加一個數字來標記位置。使用位置號恢復了之前的備份文件後,你應從命令行輸入下面內容:
mysqlbinlog --stop-position="368312" /var/log/mysql/bin.123456 \
| mysql -u root -pmypwd
mysqlbinlog --start-position="368315" /var/log/mysql/bin.123456 \
| mysql -u root -pmypwd \
#上面的第1行將恢復到中止位置爲止的全部事務。下一行將恢復從給定的起始位置直到二進制日誌結束的全部事務。由於mysqlbinlog的輸出包括每一個SQL語句記錄以前的SET TIMESTAMP語句,恢復的數據和相關MySQL日誌將反應事務執行的原時間。
六、mysqldump --master-data=2 --single-transaction
一、mysqldump處處數據主要有兩種控制:一種導出的全過程加鎖lock-tables,另外一種是不加。前者在導出開始時執行FLUSH TABLES WITH READ LOCK;也就是全局讀鎖,會阻塞其餘寫操做,以保證導出是一致性的;所以只有在導出測試數據時或導出時沒有業務鏈接操做時可不加lock-all-tables。
二、single-transaction和lock-all-tables選項是二選一的,前者是在導出開始時設置事務隔離狀態並使用一致性快照開始事務,然後立刻unlock tables,而後執行導出,導出過程不影響其餘事務或業務鏈接,但只支持相似InnoDB多版本特性的引擎,由於必須保證導出期間其餘操做(事務點t2)改變了數據,而導出時仍能取出導出開始的事務點t1時的數據。而lock-all-tables則是一開始就加全局讀鎖,知道dump完成。
三、master_data選項開啓時默認打開lock-all-tables,同時實現了兩個功能,一個加鎖,一個取得log信息。
#master_data取1和2的區別在於後者把change master 命令註釋起來了,實際意義不大
四、
master_data和single-transaction同時使用時,現價全局讀鎖,而後設置事務一致性和使用一致性快照開始事務,而後立刻就取消鎖,而後執行導出
七、mysql字符集調整(瞭解)
#字符亂碼問題就須要調整
mysql編譯安裝時,指定字符集的方法:
./configure --with-charset=utf8
mysql的字符集有4個級別的默認設置:服務器級、數據庫級、表級和字段級
1、服務器級三種指定字符集方法:
一、能夠在my.cnf中設置:
[mysql]
### 默認字符集爲utf8
default-character-set=utf8
二、### (設定鏈接mysql數據庫時使用utf8編碼,以讓mysql數據庫爲utf8運行)
init_connect='SET NAMES utf8'
三、在啓動選項中指定:
mysqld --default-character-set=utf8
#若是沒有特別的指定服務器字符集,默認使用
latin1(ISO-8859-1的別名)做爲服務器字符集。上面三種設置的方式都只指定了字符集,沒有去作校對,咱們能夠用
show variables like 'char%';命令查詢當前服務器的字符
集和校對規則。
注:若是增長default-character-set=utf8後,MYSQL啓動報錯。能夠用character_set_server=utf8來取代default-character-set=utf8,就能正常啓動了。這是由於MYSQL不一樣版本識別的問題。
2、數據庫級
建立數據庫時指定字符集
mysql>CREATE DATABASE my_db default charset utf8 COLLATE utf8_general_ci;
#注意後面這句話 "COLLATE utf8_general_ci",大體意思是在排序時根據utf8編碼格式來排序
#若是指定了數據庫編碼,那麼在這個數據庫下建立的全部數據表的默認字符集都會是utf8了
修改MYSQL數據庫編碼
mysql>ALTER DATABASE my_db DEFAULT CHARACTER SET utf8;
#將MYSQL的my_db數據庫的編碼設爲utf8
3、表級
建立表時指定字符集
mysql>create table my_table (name varchar(20) not null default '')type=myisam default charset utf8;
#這句話就是建立一個表,指定默認字符集爲utf8
修改MYSQL表的編碼:
ALTER TABLE my_table DEFAULT CHARACTER SET utf8;
以上命令就是將一個表my_table的編碼改成utf8
4、字段級
修改字段的編碼:
ALTER TABLE `test` CHANGE `name` `name` VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
#將MYSQL數據庫test表中name的字段編碼改成utf8