MySQL詳細03-ロック-トランザクション-GTID
MySQLのロック
操作時のロックモード
リードロック:共有ロックとも呼ばれ、複数のリード操作が同時に適用され、ブロックされない
書き込みロック:排他ロックまたは排他ロックとも呼ばれ、ブロックされます.
ロック粒度による分類
テーブルロック:table lock、テーブル全体をロックし、オーバーヘッドが小さい
行ロック:row lock、必要な行をロックして、オーバーヘッドが大きい
注意:ロックの粒度が小さいほど、オーバーヘッドは大きくなりますが、同時性が優れています.
ロックによる実装位置分類
MySQLロック:手動でロックをかけることができ、表示ロック(表レベルロック)とも呼ばれます.
ストレージエンジンロック:自動的に実行され、暗黙ロックとも呼ばれます.
行レベルロック:選択した行の一部のみをロックし、InnoDBストレージエンジンでサポートされている別の表示ロックです.
MySQLのトランザクション
トランザクションは原子間クエリ文のセットです
ACIDテスト:ACIDテストを満たすと、トランザクションがサポートされているか、互換性があることを示します.
独立性レベル
MySQLのトランザクション独立性レベルの表示
MySQLがトランザクションを実現する原理:MVCC(マルチバージョン同時制御)
手動でトランザクションを実行
事務のGTID
概要:Global Transaction ID、MySQL 5.6で導入されたsalveをmasterに迅速に向上させ、トランザクションの安全を保証するメカニズム.レプリケーション機能の構成、監視、管理がより容易になり、より堅牢になります.
GTIDを使用した単純マスターモデルの構成
説明:MariaDB 10バージョンをMySQL 5.6の代替プログラムとして使用します.違いはmariadbでGTID機能がデフォルトでオンになっているため、gtid-mode,enforce-gtid-consistencyの2つのパラメータはサポートされていません.
プライマリ・スレーブ・ノードのサービス・プロファイルの構成
プライマリ・サーバ上のレプリケーション・ユーザーの作成
スタンバイノードの初期データセットの提供
ノードからのレプリケーションスレッドの開始
確認表示
masterとslaveでそれぞれ「show master status;」を実行し、Executed_の表示Gtid_Setアイテムが一致しているかどうか
下一篇:MySQL深入02-DML的Select查询
上一篇:MySQL深入04-ストレージエンジン
操作時のロックモード
リードロック:共有ロックとも呼ばれ、複数のリード操作が同時に適用され、ブロックされない
書き込みロック:排他ロックまたは排他ロックとも呼ばれ、ブロックされます.
ロック粒度による分類
テーブルロック:table lock、テーブル全体をロックし、オーバーヘッドが小さい
行ロック:row lock、必要な行をロックして、オーバーヘッドが大きい
注意:ロックの粒度が小さいほど、オーバーヘッドは大きくなりますが、同時性が優れています.
ロックによる実装位置分類
MySQLロック:手動でロックをかけることができ、表示ロック(表レベルロック)とも呼ばれます.
lock tables Tb_Name {read | write} [,Tb_Name2 Lock_Type2]…
ストレージエンジンロック:自動的に実行され、暗黙ロックとも呼ばれます.
行レベルロック:選択した行の一部のみをロックし、InnoDBストレージエンジンでサポートされている別の表示ロックです.
select … lock in share mode; #
select … for update; #
MySQLのトランザクション
トランザクションは原子間クエリ文のセットです
ACIDテスト:ACIDテストを満たすと、トランザクションがサポートされているか、互換性があることを示します.
A:Atomicity #
C:Consistency #
I:Isolation # ,
D:Durability # , ,
独立性レベル
read uncommited ( ) # , ,
# :
read commited( ) # , ,
# : , ,
repeatable read( ) #
# : ,
serializable( ) # , ,
MySQLのトランザクション独立性レベルの表示
show global variables like ‘tx_isolation’;
select @@global.tx_isolation;
# : , “ ”
MySQLがトランザクションを実現する原理:MVCC(マルチバージョン同時制御)
,InnoDB ;
,InnoDB 2 , , ( :system version number)
, ,
: 2 :read commited repeatable read
手動でトランザクションを実行
start transaction; #
rollback;# ,
savepoint a; # a
rollback to a; # a
commit; #
# , ,
select @@global.autocommit; #
set global autocommit = 0; #
# , ,
事務のGTID
概要:Global Transaction ID、MySQL 5.6で導入されたsalveをmasterに迅速に向上させ、トランザクションの安全を保証するメカニズム.レプリケーション機能の構成、監視、管理がより容易になり、より堅牢になります.
# :
GTID=UUID(Server ID:128 )+ ,
GTID ;
GTID slave;
# : salve master, GTID
GTIDを使用した単純マスターモデルの構成
説明:MariaDB 10バージョンをMySQL 5.6の代替プログラムとして使用します.違いはmariadbでGTID機能がデフォルトでオンになっているため、gtid-mode,enforce-gtid-consistencyの2つのパラメータはサポートされていません.
プライマリ・スレーブ・ノードのサービス・プロファイルの構成
# master :
[mysqld]
server-id=1 # server-id
port=3306
datadir=/mydata/data
socket=/tmp/mysql.sock
log-bin=master-bin # ,
binlog-format=ROW # , row
log-slave-updates=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-threads=2
binlog-checksum=CRC32 #
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
report-host=master.lamp.com # slave master slave IP , master “show slave hosts” slave
report-port=3306 # slave master slave mysqld , slave 3306
# slave :
[mysqld]
server-id=11
port=3306
datadir=/mydata/data
socket=/tmp/mysql.sock
log-bin=slave-bin
binlog-format=ROW
log-slave-updates=true # slave
master-info-repository=TABLE # slave repository master , table;
relay-log-info-repository=TABLE
sync-master-info=1 # master-info 1 , slave
slave-parallel-threads=2 # slave SQL ;0
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1 # ,
report-host=slave.lamp.com
report-port=3306
プライマリ・サーバ上のレプリケーション・ユーザーの作成
mysql> grant replication slave on *.* to repluser@'172.16.25.%' identified by 'replpass';
スタンバイノードの初期データセットの提供
# , , slave ;
# master
musqldump --single-transaction --all-databases --flush-logs --master-date=2 > all.sql
# slave
mysql < all.sql
# GTID, master show master status , slave ;
ノードからのレプリケーションスレッドの開始
# GTID , :
mysql> change master to master_host='master.lamp.com',master_user='repluser',master_password='replpass',master_user_gtid=current_pos;
mysql> start slave;
確認表示
masterとslaveでそれぞれ「show master status;」を実行し、Executed_の表示Gtid_Setアイテムが一致しているかどうか
下一篇:MySQL深入02-DML的Select查询
上一篇:MySQL深入04-ストレージエンジン