MySQL5.6ã§GTIDã¬ããªã±ã¼ã·ã§ã³ã®å°å ¥æé ã¨è§£é¤æé
MySQL5.6GAãåºã¦ãã大åçµã£ã¡ããã¾ãããã
çæ§ãããã¯ãç°å¢ã§ã¬ã³ã¬ã³ä½¿ã£ã¦ããã¾ãã§ããããã
仿´ãªããæé ãæ´çããã®ã§è¨è¿°ãã¦ããã¾ãã
â GTIDã¨ã¯
Global Transaction Identifiers
ä»ã¾ã§ã®MySQLã®ã¬ããªã±ã¼ã·ã§ã³ã§è¡ãªã£ã¦ããããMasterã®binlogãã¡ã¤ã«å + ãã¸ã·ã§ã³çªå·ãã«ããæ
å ±ã§ã¯ãªãã
ãã©ã³ã¶ã¯ã·ã§ã³ãã¨ã«GTIDãæãããäºã§ç®¡çã§ããããã«ãªãã¨ããæ©è½ã§ãã
mysqlfailoverãå©ç¨ããã¨ããã¹ã¿ã¼é害æã«åã¹ã¬ã¼ãã§æãé²ãã§ããGTIDãæã¤ã¹ã¬ã¼ãããã¹ã¿ã¼ã«èªåææ ¼ãã¾ãã
ã»ã¡ãªãã
ãããã»CHANGE MASTERæãæã¤éã«ãã¸ã·ã§ã³çªå·ãæå®ããªãã¦ãããªã
ãããã»MySQL-MHAãå©ç¨ããªãã¦ãGTID+mysqlfailoverã§SPOFããªããã
ã»ãã¡ãªãã
ããã»æ
£ããã®ã大å¤ï¼ä½å¹´ãbinlog+positionã§ãã£ã¦ãã¦ãã®ã§ï¼
ããã»GTIDã¢ã¼ãã¨å¾æ¥ã®ã¢ã¼ãã¯æ··å¨ã§ããªãï¼ãã¹ã¿ã¼GTID,ã¹ã¬ã¼ãéGTIDçï¼
ããã»å
¨ã¹ã¬ã¼ãã§binlogåºåãå¿
è¦
ããã»éãã©ã³ã¶ã¯ã·ã§ã³å¯¾å¿ã®ã¹ãã¬ã¼ã¸ã¨ã³ã¸ã³ã¯ä½¿ç¨ä¸è½ï¼MyISAMï¼
ããã»CREATE TABLE ã»ã»ã»SELECTã¯ä½¿ç¨ä¸è½
ãªã©ãªã©
MySQL-5.6.5の新機能「GTID」を使う際に抑えておきたい落とし穴
ãã¡ãªããæ¨ãã«ãªã£ã¦ãã¾ãã¾ããããã¨ããããå°å ¥ãã¦ããã¾ãããã
â MySQL5.6å°å ¥ã¨GTIDã¬ããªã±ã¼ã·ã§ã³ä½æ
ããã¹ã¿ã¼ãã¹ã¬ã¼ãã§ä½æ¥ã
MySQL5.6ã¤ã³ã¹ãã¼ã«
yum install http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.6/MySQL-client-5.6.10-1.el6.x86_64.rpm \ http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.6/MySQL-shared-compat-5.6.10-1.el6.x86_64.rpm \ http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.6/MySQL-server-5.6.10-1.el6.x86_64.rpm \ http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.6/MySQL-devel-5.6.10-1.el6.x86_64.rpm \ http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.6/MySQL-shared-5.6.10-1.el6.x86_64.rpm
my.cnfç·¨é
vim /etc/my.cnf
report_host=ãã¹ãå
server-id = 䏿ã®çªå·
ãããããã®ãµã¼ãã§å¤æ´ãã¦ãã ããã
#----------------------------------------------------------- # MySQL clients #----------------------------------------------------------- [client] port = 3306 socket = /var/lib/mysql/mysql.sock #----------------------------------------------------------- # MySQL server #----------------------------------------------------------- [mysqld] port = 3306 socket = /var/lib/mysql/mysql.sock character-set-server = utf8 skip-name-resolve max_connections = 1000 binlog_cache_size = 1M sort_buffer_size = 8M join_buffer_size = 128K thread_cache_size = 64 thread_concurrency = 8 query_cache_size = 0 query_cache_limit = 2M ft_min_word_len = 4 default_storage_engine = InnoDB thread_stack = 192K transaction_isolation = REPEATABLE-READ tmp_table_size = 64M log_output = FILE general_log = OFF ##### Binary Log Configuration binlog_format = MIXED expire_logs_days = 2 ##### GTIDã«å¿ è¦ãªè¨å® ##### log-bin= mysql-bin log-slave-update gtid-mode = ON enforce-gtid-consistency master_info_repository = TABLE relay_log_info_repository = TABLE report_host=ãã¹ãå sync_binlog = 1 server-id = 10 key_buffer_size = 32M read_buffer_size = 2M read_rnd_buffer_size = 16M innodb_buffer_pool_size = 256M innodb_log_buffer_size = 16M innodb_log_file_size = 256M innodb_flush_method = O_DIRECT innodb_thread_concurrency = 8 innodb_flush_log_at_trx_commit = 1 innodb_doublewrite = 1 innodb_support_xa = ON innodb_read_io_threads = 4 innodb_write_io_threads = 4 innodb_io_capacity = 200 [mysqldump] quick max_allowed_packet = 128M default-character-set = utf8 [mysql] no-auto-rehash default-character-set = utf8 #safe-updates [mysqld_safe] open-files-limit = 8192
MySQLã®åæãã¹ã¯ã¼ã確èª
(ã³ãã¼ãã¦ããï¼
cat /root/.mysql_secret # The random password set for the root user at Thu Jun 6 19:11:26 2013 (local time):*******
MySQLèµ·å
/etc/init.d/mysql start
確èª
mysql -uroot -p*******
ãã¹ã¯ã¼ã夿´
SET PASSWORD FOR root@localhost=PASSWORD('*****');
GTIDã¢ã¼ã確èª
mysql> show variables like '%gtid%'; +--------------------------+-----------+ | Variable_name | Value | +--------------------------+-----------+ | enforce_gtid_consistency | ON | | gtid_executed | | | gtid_mode | ON | | gtid_next | AUTOMATIC | | gtid_owned | | | gtid_purged | | +--------------------------+-----------+ 6 rows in set (0.05 sec)
ããã¹ã¿ã¼ã§ä½æ¥ã
ãã¹ã¿ã¼ã®ãã¼ã¿ãdumpãã
mysqldump -uroot --all-databases --single-transaction > fulldump.sql
ã¨ãä»ã¾ã§ã®MySQLã®ç¨ã«dumpãã¦ã¿ããã¨ã©ã¼ãåºãã
Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don't want to restore GTIDs, pass --set-gtid-purged=OFF. To make a complete dump, pass --all-databases --single-transaction --triggers --routines --events. 5.6ã§GTIDã¤ãã£ã¦ããªããã®ãªãã·ã§ã³ã¤ããã¨æããã --triggers --routines --events
ãªã®ã§
mysqldump -uroot --all-databases --single-transaction --triggers --routines --events > fulldump.sql
ãããã¯ãmysqlã®ãã¼ã¿ãã£ã¬ã¯ããªãã¨ã¾ããã¨ã³ãã¼ã
ã¹ã¬ã¼ãã«è»¢éãã
scp fulldump.sql ã¹ã¬ã¼ãIP:/tmp
ã¬ããªã±ã¼ã·ã§ã³ã¦ã¼ã¶ä½æ
CREATE USER 'repl'@'ã¹ã¬ã¼ãIP' IDENTIFIED BY 'repl'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'ã¹ã¬ã¼ãIP'; FLUSH PRIVILEGES;
ã¦ã¼ã¶ç¢ºèª
mysql> select user,host from mysql.user; +------+-----------------+ | user | host | +------+-----------------+ | root | 127.0.0.1 | | repl | ã¹ã¬ã¼ãIP | | | | ãããããã
ãã¹ã¬ã¼ãã§ä½æ¥ã
dumpãã¼ã¿ããªã¹ãã¢
MySQLèµ·åæ¸ã¿ã®å ´åã
gtid_executedãresetããå¿
è¦ããããããslaveå´ã§reset masterãè¡ã
mysql> reset master;
mysql -uroot < /tmp/fulldump.sql
â»ãã¼ã¿ãã£ã¬ã¯ããªãã³ãã¼ãã¦ããå ´åã¯ãauto.cnfã¯åé¤ãã¦èµ·åãã
ãã¹ã¿ã¼æ å ±
change master to master_host = 'ãã¹ã¿ã¼IP', master_port=3306, master_user='repl', master_password='repl', master_auto_position=1;
確èªãã
start slave; show slave status\G; ... Slave_IO_Running: Yes Slave_SQL_Running: Yes ... Retrieved_Gtid_Set: e82f9904-ce91-11e2-8089-fa163e6d5fe4:17 Executed_Gtid_Set: e82f9904-ce91-11e2-8089-fa163e6d5fe4:1-17 ...
ãã¨ã¯ãã¹ã¿ã¼ã§æ´æ°ãããã®ãã¹ã¬ã¼ãã«åæ ãããã確èªã
â ã¬ããªã±ã¼ã·ã§ã³ã®ã¨ã©ã¼SKIPæ¹æ³
éç¨ãã¦ããã¨ãªããã¹ãªã©ã§ãã¹ã¬ã¼ãå´ã«ã¨ã©ã¼ãçºçãã¦ãã¾ããã¨ããããã¨æãã¾ãã
ä»ã¾ã§ã¯ãSET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;ã§SKIPãã¾ããã¾ãããã
GTIDã¢ã¼ããONã ã¨ãã®æ¹æ³ã¯ä½¿ãã¾ããã
ã¨ã©ã¼ä¾
Last_Error: Error 'Unknown database 'ttt4'' on query. Default database: 'ttt4'. Query: 'create table test_table(id int, name varchar(20))'
ãã¹ã¬ã¼ãã§ä½æ¥ã
show slave statusã§Master_UUIDãRetrieved_Gtid_SetãExecuted_Gtid_Set
ã®å¤ã確èªãã¾ãã
mysql> show slave status \G; ... Master_UUID: e82f9904-ce91-11e2-8089-fa163e6d5fe4 Retrieved_Gtid_Set: e82f9904-ce91-11e2-8089-fa163e6d5fe4:17-18 Executed_Gtid_Set: 98193a23-cf34-11e2-84ae-fa163e1944de:1,e82f9904-ce91-11e2-8089-fa163e6d5fe4:1-17 ...
Executed_Gtid_Setãå®è¡æ¸ã¿ã®GTIDãªã®ã§ã:1-17ã¨ãªã£ã¦ããã®ããããã¾ãã
Retrieved_Gtid_Setãè¦ãã¨:17-18ã¨ãªã£ã¦ãã¦ã:18ãå®è¡ããã¦ããªãã®ã§
ãã®:18ãã¨ã©ã¼ãã§ã¦ããIDã ã¨ç¹å®ã§ãã¾ãã
ãã®ä¸æãSKIPããããã«ã¯ã以ä¸ã®ããã«æå®ãã¾ãã
SET GTID_NEXT = "e82f9904-ce91-11e2-8089-fa163e6d5fe4:18"; BEGIN; COMMIT; SET GTID_NEXT = AUTOMATIC; START SLAVE;
ããã©ãï¼ï¼ï¼ï¼ï¼
SKIP大éã«ããã¨ãã«ãªã£ããããã大å¤ããã
ããã¾ã§ãæ§ç¯ã¨ã¬ããªã±ã¼ã·ã§ã³ã®ä½æãã¨ã©ã¼å¯¾å¦ãªã©ãããã¾ãããã
å¥ã«mysqlfailover使ãäºå®ãªããâ¦ã£ã¦ãã人ã¯ã以ä¸ã®æé ã§å¾æ¥ã®ã¬ããªã±ã¼ã·ã§ã³æ¹æ³ã«
æ»ããã¨ãå¯è½ã§ãã
â GTIDã使ããªãä»ã¾ã§éãã®ã¬ããªã±ã¼ã·ã§ã³ã«æ»ã
ããã¹ã¿ã¼ã§ä½æ¥ã
my.cnfè¨å®å¤æ´
vim /etc/my.cnf gtid-mode = OFF
MySQLåèµ·å
/etc/init.d/mysql restart
ãã¸ã·ã§ã³ç¢ºèª
mysql> show master status; +------------------+----------+--------------+------------------+-------------------------------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------------------------------+ | mysql-bin.000003 | 120 | | | e82f9904-ce91-11e2-8089-fa163e6d5fe4:1-18 | +------------------+----------+--------------+------------------+-------------------------------------------+ 1 row in set (0.00 sec)
ãã¹ã¬ã¼ãã§ä½æ¥ã
my.cnfè¨å®å¤æ´
vim /etc/my.cnf gtid-mode = OFF
MySQLåèµ·å
/etc/init.d/mysql restart
ãã§ã³ã¸ãã¹ã¿ã¼
CHANGE MASTER CHANGE MASTER TO MASTER_HOST = 'ãã¹ã¿ã¼IP', MASTER_USER = 'repl', MASTER_PASSWORD = 'repl', MASTER_LOG_FILE = 'mysql-bin.000003', MASTER_LOG_POS = 120, MASTER_AUTO_POSITION = 0;
ã¬ããªåé
start slave;
確èª
show slave status \G;
ããã§ã¨ã©ã¼SKIPãæ¾é¡ã§ãï¼ï¼ï¼ã帰ããªããï¼
ä»ã«ãããããMySQL5.6ã®åæãçºãããã¦ãã®ã§ã
ããã¾ãããã®è¨äºãåèã«ãã¾ãããã
ç´ æµãªMySQL5.6ã©ã¤ããï¼