Mysql事務(wù)、日志、用戶管理

2017年2月22日00:05:35 發(fā)表評論 3,644 ℃

mysql事務(wù)管理

RDBMS : ACID (原子性、一致性、隔離性、持久性)

automicity:原子性,事務(wù)所引起的數(shù)據(jù)操作,要么都完成,要么都不執(zhí)行

consistency : 一致性,

isolation : 隔離性

事務(wù)調(diào)度:事務(wù)之間影響最小

MVCC:多版本并發(fā)控制

durability : 一旦事務(wù)成功完成,系統(tǒng)必須保證任何故障都不會影響事務(wù)表現(xiàn)出不一致性

1、事務(wù)提交之前就已經(jīng)寫出數(shù)據(jù)至持久性存儲

2、結(jié)合事務(wù)日志完成

事務(wù)日志:順序IO

數(shù)據(jù)文件:隨機(jī)IO

事務(wù)的狀態(tài):

活動的:active

部分提交的:最后一條語句執(zhí)行后

失敗的:

終止的:
提交的:

事務(wù):并發(fā)執(zhí)行

1、提高吞吐量和資源利用率

2、減少等待時間

事務(wù)調(diào)度:

可恢復(fù)調(diào)度:
無級聯(lián)調(diào)度:

并發(fā)控制依賴的技術(shù)手段:

餓死

死鎖

時間戳

多版本快照隔離

多事務(wù)同時執(zhí)行:彼此之間互不影響的方式進(jìn)行并行

事務(wù)之間交互

通過數(shù)據(jù)集

事務(wù)日志:

重做日志

redo log

撤銷日志

undo log

隔離性

隔離級別

read uncommitted :讀未提交

read committed : 讀提交

repatable read:可重讀

seriablizable:可串行

start tansaction:啟動事務(wù)

commit:提交

rollback : 回滾

如果沒有明確啟動事務(wù):

autocommit :能實(shí)現(xiàn)自動提交,每一個操作都直接提交

建議:明確使用事務(wù),并且關(guān)閉自動提交:

保存點(diǎn):savepoint sid

回滾至保存點(diǎn): rollback to  sid

mysql用戶和權(quán)限管理

user: Contains user accounts, global privileges, and other non-privilege columns.
user: 用戶帳號、全局權(quán)限
db: Contains database-level privileges.
db: 庫級別權(quán)限
host: Obsolete.
host: 廢棄
tables_priv: Contains table-level privileges.
表級別權(quán)限
columns_priv: Contains column-level privileges.
列級別權(quán)限
procs_priv: Contains stored procedure and function privileges.
存儲過程和存儲函數(shù)相關(guān)的權(quán)限
proxies_priv: Contains proxy-user privileges.
代理用戶權(quán)限

用戶賬號:

用戶名@主機(jī)

用戶名:16字符以內(nèi)

主機(jī):

主機(jī)名:www.test.com,mysql

IP:172.16.10.1

網(wǎng)絡(luò)地址:172.16.0.0/255.255.0.0

通配符:%,_

172.16.%.%

%.test.com

--skip-name-resolve 略過名稱解析

權(quán)限級別

全局級別

表:delete、alter、trigger、

列:select、insert、update

存儲過程和存儲函數(shù)

臨時表:內(nèi)存表

heap:16MB

觸發(fā)器,主動數(shù)據(jù)庫

創(chuàng)建用戶:

create user 'usernam'@'hostname' identified by 'password'

insert into mysql.user

grant

grant all privileges on [object_type] db.* to username@'%'

object_type

table

function

procedure

grant all privileges on function db.abc to username@'localhost'

resource_option: 

MAX_QUERIES_PER_HOUR count 限制資源使用權(quán)限

MAX_UPDATES_PER_HOUR count 限制每小時update使用次數(shù)

MAX_CONNECTIONS_PER_HOUR count 限制新的鏈接請求

MAX_USER_CONNECTIONS count 某一個用戶最多允許鏈接多少次

刪除用戶:drop user 'uername'@'host'

重命名用戶:rename user old_name to new_name

取消授權(quán):revoke all privileges ,grant option from user@host

重置mysql root密碼

啟動mysqld_safe時傳遞兩個參數(shù)

--skip-grant-tables

--skip-networking

通過更新授權(quán)表方式直接修改其密碼,后移出此兩個選項(xiàng)重啟服務(wù)

mysql日志管理

錯誤日志:

log_error

log_warnigs

服務(wù)器啟動和關(guān)閉過程總的信息

服務(wù)器運(yùn)行過程中的錯誤信息

事件調(diào)度器運(yùn)行一個事件時產(chǎn)生的信息

在從服務(wù)器上啟動從服務(wù)器進(jìn)程時產(chǎn)生的信息

一般查詢?nèi)罩?/span>

general_log

general_log_file

log_output=[file|table|none]

log

慢查詢?nèi)罩?/span>

long_query_time

log_slow_queries={yes|no}

slow_query_log

slow_query_log_file

二進(jìn)制日志:DML,DDL 任何引起或可能引起數(shù)據(jù)庫變化的操作

復(fù)制、即時點(diǎn)恢復(fù)

mysqlbinlog命令:查看mysql二進(jìn)制日志

--start-datetime 'yyyy-mm-dd hh:mm:ss'

--stop-datetime

--start-position

--stop-position

二進(jìn)制日志的格式:

基于語句:statement

基于行:row

混合模式:mixed

二進(jìn)制日志事件:

產(chǎn)生的時間

相對位置

二進(jìn)制日志文件:

索引文件

二進(jìn)制日志文件

查看當(dāng)前正在使用的二進(jìn)制日志文件

show master status;

查看所有的二進(jìn)制日志文件

show binary logs;

刪除日志文件

purge binary logs to '二進(jìn)制日志文件'

查看事件

show binlog events in '二進(jìn)制日志文件名' [from pos]

flush logs:讓日志滾動

中繼日志

從主服務(wù)器的二進(jìn)制日志文件中復(fù)制而來的事件,并保存為日志

事務(wù)日志

事務(wù)性儲存引擎用于保證原子性、一致性、隔離性和持久性

innodb_flush_log_at_trx_commit:

0:每秒同步,并執(zhí)行磁盤flush操作

1:沒事務(wù)同步,并執(zhí)行磁盤flush操作

2:每事務(wù)同步,但不執(zhí)行磁盤flush操作

數(shù)據(jù)庫引擎

MyISAM

不支持事務(wù)

表鎖

不支持外鍵

B樹索引、fulltext索引、空間索引

支持表壓縮

InnoDB

支持事務(wù)

行級鎖

B數(shù)索引、聚簇索引、自適應(yīng)hash索引

表空間、raw磁盤設(shè)備

MRG_MYISAM:

expire_logs_days={0..99}

設(shè)定二進(jìn)制日志的過期天數(shù),超出此天數(shù)的二進(jìn)制日志文件將被自動刪除。默認(rèn)為0,表示不啟用過期自動刪除功能。如果啟用此功能,自動刪除工作通常發(fā)生在MySQL啟動時或FLUSH日志時。作用范圍為全局,可用于配置文件,屬動態(tài)變量。

general_log={ON|OFF}

設(shè)定是否啟用查詢?nèi)罩荆J(rèn)值為取決于在啟動mysqld時是否使用了--general_log選項(xiàng)。如若啟用此項(xiàng),其輸出位置則由--log_output選項(xiàng)進(jìn)行定義,如果log_output的值設(shè)定為NONE,即使用啟用查詢?nèi)罩?,其也不會記錄任何日志信息。作用范圍為全局,可用于配置文件,屬動態(tài)變量。

general_log_file=FILE_NAME

查詢?nèi)罩镜娜罩疚募Q,默認(rèn)為“hostname.log"。作用范圍為全局,可用于配置文件,屬動態(tài)變量。

binlog-format={ROW|STATEMENT|MIXED}

指定二進(jìn)制日志的類型,默認(rèn)為STATEMENT。如果設(shè)定了二進(jìn)制日志的格式,卻沒有啟用二進(jìn)制日志,則MySQL啟動時會產(chǎn)生警告日志信息并記錄于錯誤日志中。作用范圍為全局或會話,可用于配置文件,且屬于動態(tài)變量。

log={YES|NO}

是否啟用記錄所有語句的日志信息于一般查詢?nèi)罩?general query log)中,默認(rèn)通常為OFF。MySQL 5.6已經(jīng)棄用此選項(xiàng)。

log-bin={YES|NO}

是否啟用二進(jìn)制日志,如果為mysqld設(shè)定了--log-bin選項(xiàng),則其值為ON,否則則為OFF。其僅用于顯示是否啟用了二進(jìn)制日志,并不反應(yīng)log-bin的設(shè)定值。作用范圍為全局級別,屬非動態(tài)變量。

log_bin_trust_function_creators={TRUE|FALSE}

此參數(shù)僅在啟用二進(jìn)制日志時有效,用于控制創(chuàng)建存儲函數(shù)時如果會導(dǎo)致不安全的事件記錄二進(jìn)制日志條件下是否禁止創(chuàng)建存儲函數(shù)。默認(rèn)值為0,表示除非用戶除了CREATE ROUTING或ALTER ROUTINE權(quán)限外還有SUPER權(quán)限,否則將禁止創(chuàng)建或修改存儲函數(shù),同時,還要求在創(chuàng)建函數(shù)時必需為之使用DETERMINISTIC屬性,再不然就是附帶READS SQL DATA或NO SQL屬性。設(shè)置其值為1時則不啟用這些限制。作用范圍為全局級別,可用于配置文件,屬動態(tài)變量。

log_error=/PATH/TO/ERROR_LOG_FILENAME

定義錯誤日志文件。作用范圍為全局或會話級別,可用于配置文件,屬非動態(tài)變量。

log_output={TABLE|FILE|NONE}

定義一般查詢?nèi)罩竞吐樵內(nèi)罩镜谋4娣绞?,可以是TABLE、FILE、NONE,也可以是TABLE及FILE的組合(用逗號隔開),默認(rèn)為TABLE。如果組合中出現(xiàn)了NONE,那么其它設(shè)定都將失效,同時,無論是否啟用日志功能,也不會記錄任何相關(guān)的日志信息。作用范圍為全局級別,可用于配置文件,屬動態(tài)變量。

log_query_not_using_indexes={ON|OFF}

設(shè)定是否將沒有使用索引的查詢操作記錄到慢查詢?nèi)罩?。作用范圍為全局級別,可用于配置文件,屬動態(tài)變量。

log_slave_updates

用于設(shè)定復(fù)制場景中的從服務(wù)器是否將從主服務(wù)器收到的更新操作記錄進(jìn)本機(jī)的二進(jìn)制日志中。本參數(shù)設(shè)定的生效需要在從服務(wù)器上啟用二進(jìn)制日志功能。

log_slow_queries={YES|NO}

是否記錄慢查詢?nèi)罩尽B樵兪侵覆樵兊膱?zhí)行時間超出long_query_time參數(shù)所設(shè)定時長的事件。MySQL 5.6將此參數(shù)修改為了slow_query_log。作用范圍為全局級別,可用于配置文件,屬動態(tài)變量。

log_warnings=#

設(shè)定是否將警告信息記錄進(jìn)錯誤日志。默認(rèn)設(shè)定為1,表示啟用;可以將其設(shè)置為0以禁用;而其值為大于1的數(shù)值時表示將新發(fā)起連接時產(chǎn)生的“失敗的連接”和“拒絕訪問”類的錯誤信息也記錄進(jìn)錯誤日志。

long_query_time=#

設(shè)定區(qū)別慢查詢與一般查詢的語句執(zhí)行時間長度。這里的語句執(zhí)行時長為實(shí)際的執(zhí)行時間,而非在CPU上的執(zhí)行時長,因此,負(fù)載較重的服務(wù)器上更容易產(chǎn)生慢查詢。其最小值為0,默認(rèn)值為10,單位是秒鐘。它也支持毫秒級的解析度。作用范圍為全局或會話級別,可用于配置文件,屬動態(tài)變量。

max_binlog_cache_size{4096 .. 18446744073709547520}

二進(jìn)定日志緩存空間大小,5.5.9及以后的版本僅應(yīng)用于事務(wù)緩存,其上限由max_binlog_stmt_cache_size決定。作用范圍為全局級別,可用于配置文件,屬動態(tài)變量。

max_binlog_size={4096 .. 1073741824}

設(shè)定二進(jìn)制日志文件上限,單位為字節(jié),最小值為4K,最大值為1G,默認(rèn)為1G。某事務(wù)所產(chǎn)生的日志信息只能寫入一個二進(jìn)制日志文件,因此,實(shí)際上的二進(jìn)制日志文件可能大于這個指定的上限。作用范圍為全局級別,可用于配置文件,屬動態(tài)變量。

max_relay_log_size={4096..1073741824}

設(shè)定從服務(wù)器上中繼日志的體積上限,到達(dá)此限度時其會自動進(jìn)行中繼日志滾動。此參數(shù)值為0時,mysqld將使用max_binlog_size參數(shù)同時為二進(jìn)制日志和中繼日志設(shè)定日志文件體積上限。作用范圍為全局級別,可用于配置文件,屬動態(tài)變量。

innodb_log_buffer_size={262144 .. 4294967295}

設(shè)定InnoDB用于輔助完成日志文件寫操作的日志緩沖區(qū)大小,單位是字節(jié),默認(rèn)為8MB。較大的事務(wù)可以借助于更大的日志緩沖區(qū)來避免在事務(wù)完成之前將日志緩沖區(qū)的數(shù)據(jù)寫入日志文件,以減少I/O操作進(jìn)而提升系統(tǒng)性能。因此,在有著較大事務(wù)的應(yīng)用場景中,建議為此變量設(shè)定一個更大的值。作用范圍為全局級別,可用于選項(xiàng)文件,屬非動態(tài)變量。

innodb_log_file_size={108576 .. 4294967295}

設(shè)定日志組中每個日志文件的大小,單位是字節(jié),默認(rèn)值是5MB。較為明智的取值范圍是從1MB到緩存池體積的1/n,其中n表示日志組中日志文件的個數(shù)。日志文件越大,在緩存池中需要執(zhí)行的檢查點(diǎn)刷寫操作就越少,這意味著所需的I/O操作也就越少,然而這也會導(dǎo)致較慢的故障恢復(fù)速度。作用范圍為全局級別,可用于選項(xiàng)文件,屬非動態(tài)變量。

innodb_log_files_in_group={2 .. 100}

設(shè)定日志組中日志文件的個數(shù)。InnoDB以循環(huán)的方式使用這些日志文件。默認(rèn)值為2。作用范圍為全局級別,可用于選項(xiàng)文件,屬非動態(tài)變量。

innodb_log_group_home_dir=/PATH/TO/DIR

設(shè)定InnoDB重做日志文件的存儲目錄。在缺省使用InnoDB日志相關(guān)的所有變量時,其默認(rèn)會在數(shù)據(jù)目錄中創(chuàng)建兩個大小為5MB的名為ib_logfile0和ib_logfile1的日志文件。作用范圍為全局級別,可用于選項(xiàng)文件,屬非動態(tài)變量。

relay_log=file_name

設(shè)定中繼日志的文件名稱,默認(rèn)為host_name-relay-bin。也可以使用絕對路徑,以指定非數(shù)據(jù)目錄來存儲中繼日志。作用范圍為全局級別,可用于選項(xiàng)文件,屬非動態(tài)變量。

relay_log_index=file_name

設(shè)定中繼日志的索引文件名,默認(rèn)為為數(shù)據(jù)目錄中的host_name-relay-bin.index。作用范圍為全局級別,可用于選項(xiàng)文件,屬非動態(tài)變量。

relay-log-info-file=file_name

設(shè)定中繼服務(wù)用于記錄中繼信息的文件,默認(rèn)為數(shù)據(jù)目錄中的relay-log.info。作用范圍為全局級別,可用于選項(xiàng)文件,屬非動態(tài)變量。

relay_log_purge={ON|OFF}

設(shè)定對不再需要的中繼日志是否自動進(jìn)行清理。默認(rèn)值為ON。作用范圍為全局級別,可用于選項(xiàng)文件,屬動態(tài)變量。

relay_log_space_limit=#

設(shè)定用于存儲所有中繼日志文件的可用空間大小。默認(rèn)為0,表示不限定。最大值取決于系統(tǒng)平臺位數(shù)。作用范圍為全局級別,可用于選項(xiàng)文件,屬非動態(tài)變量。

slow_query_log={ON|OFF}

設(shè)定是否啟用慢查詢?nèi)罩尽?或OFF表示禁用,1或ON表示啟用。日志信息的輸出位置取決于log_output變量的定義,如果其值為NONE,則即便slow_query_log為ON,也不會記錄任何慢查詢信息。作用范圍為全局級別,可用于選項(xiàng)文件,屬動態(tài)變量。

slow_query_log_file=/PATH/TO/SOMEFILE

設(shè)定慢查詢?nèi)罩疚募拿Q。默認(rèn)為hostname-slow.log,但可以通過--slow_query_log_file選項(xiàng)修改。作用范圍為全局級別,可用于選項(xiàng)文件,屬動態(tài)變量。

sql_log_bin={ON|OFF}

用于控制二進(jìn)制日志信息是否記錄進(jìn)日志文件。默認(rèn)為ON,表示啟用記錄功能。用戶可以在會話級別修改此變量的值,但其必須具有SUPER權(quán)限。作用范圍為全局和會話級別,屬動態(tài)變量。

sql_log_off={ON|OFF}

用于控制是否禁止將一般查詢?nèi)罩绢愋畔⒂涗涍M(jìn)查詢?nèi)罩疚募?。默認(rèn)為OFF,表示不禁止記錄功能。用戶可以在會話級別修改此變量的值,但其必須具有SUPER權(quán)限。作用范圍為全局和會話級別,屬動態(tài)變量。

sync_binlog=#

設(shè)定多久同步一次二進(jìn)制日志至磁盤文件中,0表示不同步,任何正數(shù)值都表示對二進(jìn)制每多少次寫操作之后同步一次。當(dāng)autocommit的值為1時,每條語句的執(zhí)行都會引起二進(jìn)制日志同步,否則,每個事務(wù)的提交會引起二進(jìn)制日志同步。

【騰訊云】云服務(wù)器、云數(shù)據(jù)庫、COS、CDN、短信等云產(chǎn)品特惠熱賣中

發(fā)表評論

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: