Mysql事務、日志、用戶管理

2017年2月22日00:05:35 發表評論 3,775 ℃

mysql事務管理

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

automicity:原子性,事務所引起的數據操作,要么都完成,要么都不執行

consistency : 一致性,

isolation : 隔離性

事務調度:事務之間影響最小

MVCC:多版本并發控制

durability : 一旦事務成功完成,系統必須保證任何故障都不會影響事務表現出不一致性

1、事務提交之前就已經寫出數據至持久性存儲

2、結合事務日志完成

事務日志:順序IO

數據文件:隨機IO

事務的狀態:

活動的:active

部分提交的:最后一條語句執行后

失敗的:

終止的:
提交的:

事務:并發執行

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

2、減少等待時間

事務調度:

可恢復調度:
無級聯調度:

并發控制依賴的技術手段:

餓死

死鎖

時間戳

多版本快照隔離

多事務同時執行:彼此之間互不影響的方式進行并行

事務之間交互

通過數據集

事務日志:

重做日志

redo log

撤銷日志

undo log

隔離性

隔離級別

read uncommitted :讀未提交

read committed : 讀提交

repatable read:可重讀

seriablizable:可串行

start tansaction:啟動事務

commit:提交

rollback : 回滾

如果沒有明確啟動事務:

autocommit :能實現自動提交,每一個操作都直接提交

建議:明確使用事務,并且關閉自動提交:

保存點:savepoint sid

回滾至保存點: rollback to  sid

mysql用戶和權限管理

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

用戶賬號:

用戶名@主機

用戶名:16字符以內

主機:

主機名:www.test.com,mysql

IP:172.16.10.1

網絡地址:172.16.0.0/255.255.0.0

通配符:%,_

172.16.%.%

%.test.com

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

權限級別

全局級別

表:delete、alter、trigger、

列:select、insert、update

存儲過程和存儲函數

臨時表:內存表

heap:16MB

觸發器,主動數據庫

創建用戶:

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 限制資源使用權限

MAX_UPDATES_PER_HOUR count 限制每小時update使用次數

MAX_CONNECTIONS_PER_HOUR count 限制新的鏈接請求

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

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

重命名用戶:rename user old_name to new_name

取消授權:revoke all privileges ,grant option from user@host

重置mysql root密碼

啟動mysqld_safe時傳遞兩個參數

--skip-grant-tables

--skip-networking

通過更新授權表方式直接修改其密碼,后移出此兩個選項重啟服務

mysql日志管理

錯誤日志:

log_error

log_warnigs

服務器啟動和關閉過程總的信息

服務器運行過程中的錯誤信息

事件調度器運行一個事件時產生的信息

在從服務器上啟動從服務器進程時產生的信息

一般查詢日志

general_log

general_log_file

log_output=[file|table|none]

log

慢查詢日志

long_query_time

log_slow_queries={yes|no}

slow_query_log

slow_query_log_file

二進制日志:DML,DDL 任何引起或可能引起數據庫變化的操作

復制、即時點恢復

mysqlbinlog命令:查看mysql二進制日志

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

--stop-datetime

--start-position

--stop-position

二進制日志的格式:

基于語句:statement

基于行:row

混合模式:mixed

二進制日志事件:

產生的時間

相對位置

二進制日志文件:

索引文件

二進制日志文件

查看當前正在使用的二進制日志文件

show master status;

查看所有的二進制日志文件

show binary logs;

刪除日志文件

purge binary logs to '二進制日志文件'

查看事件

show binlog events in '二進制日志文件名' [from pos]

flush logs:讓日志滾動

中繼日志

從主服務器的二進制日志文件中復制而來的事件,并保存為日志

事務日志

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

innodb_flush_log_at_trx_commit:

0:每秒同步,并執行磁盤flush操作

1:沒事務同步,并執行磁盤flush操作

2:每事務同步,但不執行磁盤flush操作

數據庫引擎

MyISAM

不支持事務

表鎖

不支持外鍵

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

支持表壓縮

InnoDB

支持事務

行級鎖

B數索引、聚簇索引、自適應hash索引

表空間、raw磁盤設備

MRG_MYISAM:

expire_logs_days={0..99}

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

general_log={ON|OFF}

設定是否啟用查詢日志,默認值為取決于在啟動mysqld時是否使用了--general_log選項。如若啟用此項,其輸出位置則由--log_output選項進行定義,如果log_output的值設定為NONE,即使用啟用查詢日志,其也不會記錄任何日志信息。作用范圍為全局,可用于配置文件,屬動態變量。

general_log_file=FILE_NAME

查詢日志的日志文件名稱,默認為“hostname.log"。作用范圍為全局,可用于配置文件,屬動態變量。

binlog-format={ROW|STATEMENT|MIXED}

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

log={YES|NO}

是否啟用記錄所有語句的日志信息于一般查詢日志(general query log)中,默認通常為OFF。MySQL 5.6已經棄用此選項。

log-bin={YES|NO}

是否啟用二進制日志,如果為mysqld設定了--log-bin選項,則其值為ON,否則則為OFF。其僅用于顯示是否啟用了二進制日志,并不反應log-bin的設定值。作用范圍為全局級別,屬非動態變量。

log_bin_trust_function_creators={TRUE|FALSE}

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

log_error=/PATH/TO/ERROR_LOG_FILENAME

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

log_output={TABLE|FILE|NONE}

定義一般查詢日志和慢查詢日志的保存方式,可以是TABLE、FILE、NONE,也可以是TABLE及FILE的組合(用逗號隔開),默認為TABLE。如果組合中出現了NONE,那么其它設定都將失效,同時,無論是否啟用日志功能,也不會記錄任何相關的日志信息。作用范圍為全局級別,可用于配置文件,屬動態變量。

log_query_not_using_indexes={ON|OFF}

設定是否將沒有使用索引的查詢操作記錄到慢查詢日志。作用范圍為全局級別,可用于配置文件,屬動態變量。

log_slave_updates

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

log_slow_queries={YES|NO}

是否記錄慢查詢日志。慢查詢是指查詢的執行時間超出long_query_time參數所設定時長的事件。MySQL 5.6將此參數修改為了slow_query_log。作用范圍為全局級別,可用于配置文件,屬動態變量。

log_warnings=#

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

long_query_time=#

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

max_binlog_cache_size{4096 .. 18446744073709547520}

二進定日志緩存空間大小,5.5.9及以后的版本僅應用于事務緩存,其上限由max_binlog_stmt_cache_size決定。作用范圍為全局級別,可用于配置文件,屬動態變量。

max_binlog_size={4096 .. 1073741824}

設定二進制日志文件上限,單位為字節,最小值為4K,最大值為1G,默認為1G。某事務所產生的日志信息只能寫入一個二進制日志文件,因此,實際上的二進制日志文件可能大于這個指定的上限。作用范圍為全局級別,可用于配置文件,屬動態變量。

max_relay_log_size={4096..1073741824}

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

innodb_log_buffer_size={262144 .. 4294967295}

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

innodb_log_file_size={108576 .. 4294967295}

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

innodb_log_files_in_group={2 .. 100}

設定日志組中日志文件的個數。InnoDB以循環的方式使用這些日志文件。默認值為2。作用范圍為全局級別,可用于選項文件,屬非動態變量。

innodb_log_group_home_dir=/PATH/TO/DIR

設定InnoDB重做日志文件的存儲目錄。在缺省使用InnoDB日志相關的所有變量時,其默認會在數據目錄中創建兩個大小為5MB的名為ib_logfile0和ib_logfile1的日志文件。作用范圍為全局級別,可用于選項文件,屬非動態變量。

relay_log=file_name

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

relay_log_index=file_name

設定中繼日志的索引文件名,默認為為數據目錄中的host_name-relay-bin.index。作用范圍為全局級別,可用于選項文件,屬非動態變量。

relay-log-info-file=file_name

設定中繼服務用于記錄中繼信息的文件,默認為數據目錄中的relay-log.info。作用范圍為全局級別,可用于選項文件,屬非動態變量。

relay_log_purge={ON|OFF}

設定對不再需要的中繼日志是否自動進行清理。默認值為ON。作用范圍為全局級別,可用于選項文件,屬動態變量。

relay_log_space_limit=#

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

slow_query_log={ON|OFF}

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

slow_query_log_file=/PATH/TO/SOMEFILE

設定慢查詢日志文件的名稱。默認為hostname-slow.log,但可以通過--slow_query_log_file選項修改。作用范圍為全局級別,可用于選項文件,屬動態變量。

sql_log_bin={ON|OFF}

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

sql_log_off={ON|OFF}

用于控制是否禁止將一般查詢日志類信息記錄進查詢日志文件。默認為OFF,表示不禁止記錄功能。用戶可以在會話級別修改此變量的值,但其必須具有SUPER權限。作用范圍為全局和會話級別,屬動態變量。

sync_binlog=#

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

【騰訊云】云服務器、云數據庫、COS、CDN、短信等云產品特惠熱賣中

發表評論

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