1¡£mysqlÊý¾Ý¿âûÓÐÔöÁ¿±¸·ÝµÄ»úÖÆ£¬µ±Êý¾ÝÁ¿Ì«´óµÄʱºò±¸·ÝÊÇÒ»¸öºÜ´óµÄÎÊÌâ¡£»¹ºÃmysqlÊý¾Ý¿âÌṩÁËÒ»ÖÖÖ÷´Ó±¸·ÝµÄ»úÖÆ£¬Æäʵ¾ÍÊǰÑÖ÷Êý¾Ý¿âµÄËùÓеÄÊý¾Ýͬʱдµ½±¸·ÝÊý¾Ý¿âÖС£ÊµÏÖmysqlÊý¾Ý¿âµÄÈȱ¸·Ý¡£
2¡£ÒªÏëʵÏÖË«»úµÄÈȱ¸Ê×ÏÈÒªÁ˽âÖ÷´ÓÊý¾Ý¿â·þÎñÆ÷µÄ°æ±¾µÄÐèÇó¡£ÒªÊµÏÖÈȱ¸mysqlµÄ°æ±¾¶¼Òª¸ßÓÚ3.2£¬»¹ÓÐÒ»¸ö»ù±¾µÄÔÔò¾ÍÊÇ×÷Ϊ´ÓÊý¾Ý¿âµÄÊý¾Ý¿â°æ±¾¿ÉÒÔ¸ßÓÚÖ÷·þÎñÆ÷Êý¾Ý¿âµÄ°æ±¾£¬µ«ÊDz»¿ÉÒÔµÍÓÚÖ÷·þÎñÆ÷µÄÊý¾Ý¿â°æ±¾¡£
3¡£ÉèÖÃÖ÷Êý¾Ý¿â·þÎñÆ÷£º
a.Ê×ÏȲ鿴Ö÷·þÎñÆ÷µÄ°æ±¾ÊÇ·ñÊÇÖ§³ÖÈȱ¸µÄ°æ±¾¡£È»ºó²é¿´my.cnf(Ààunix)»òÕßmy.ini(windows)ÖÐmysqldÅäÖÿéµÄÅäÖÃÓÐûÓÐlog-bin(¼Ç¼Êý¾Ý¿â¸ü¸ÄÈÕÖ¾)£¬ÒòΪmysqlµÄ¸´ÖÆ»úÖÆÊÇ»ùÓÚÈÕÖ¾µÄ¸´ÖÆ»úÖÆ£¬ËùÒÔÖ÷·þÎñÆ÷Ò»¶¨ÒªÖ§³Ö¸ü¸ÄÈÕÖ¾²ÅÐС£È»ºóÉèÖÃҪдÈëÈÕÖ¾µÄÊý¾Ý¿â»òÕß²»ÒªÐ´ÈëÈÕÖ¾µÄÊý¾Ý¿â¡£ÕâÑùÖ»ÓÐÄú¸ÐÐËȤµÄÊý¾Ý¿âµÄ¸ü¸Ä²ÅдÈëµ½Êý¾Ý¿âµÄÈÕÖ¾ÖС£
server-id=1 //Êý¾Ý¿âµÄidÕâ¸öÓ¦¸ÃĬÈÏÊÇ1¾Í²»ÓøĶ¯
log-bin=log_name //ÈÕÖ¾ÎļþµÄÃû³Æ£¬ÕâÀï¿ÉÒÔÖÆ¶¨ÈÕÖ¾µ½±ðµÄĿ¼ Èç¹ûûÓÐÉèÖÃÔòĬÈÏÖ÷»úÃûµÄÒ»¸öÈÕÖ¾Ãû³Æ
binlog-do-db=db_name //¼Ç¼ÈÕÖ¾µÄÊý¾Ý¿â
binlog-ignore-db=db_name //²»¼Ç¼ÈÕÖ¾µÄÊý¾Ý¿â
ÒÔÉϵÄÈç¹ûÓжà¸öÊý¾Ý¿âÓÃ","·Ö¸î¿ª
È»ºóÉèÖÃͬ²½Êý¾Ý¿âµÄÓû§ÕʺÅ
mysql> GRANT REPLICATION SLAVE ON *.*
-> TO "repl"@"%.mydomain.com" IDENTIFIED BY "slavepass";
4.0.2ÒÔǰµÄ°æ±¾, ÒòΪ²»Ö§³ÖREPLICATION ҪʹÓÃÏÂÃæµÄÓï¾äÀ´ÊµÏÖÕâ¸ö¹¦ÄÜ
mysql> GRANT FILE ON *.*
-> TO "repl"@"%.mydomain.com" IDENTIFIED BY "slavepass";
ÉèÖúÃÖ÷·þÎñÆ÷µÄÅäÖÃÎļþºóÖØÐÂÆô¶¯Êý¾Ý¿â
b.Ëø¶¨ÏÖÓеÄÊý¾Ý¿â²¢±¸·ÝÏÖÔÚµÄÊý¾Ý
Ëø¶¨Êý¾Ý¿â
mysql> FLUSH TABLES WITH READ LOCK;
±¸·ÝÊý¾Ý¿âÓÐÁ½ÖÖ°ì·¨Ò»ÖÖÊÇÖ±½Ó½øÈëµ½mysqlµÄdataĿ¼Ȼºó´ò°üÄãÐèÒª±¸·ÝÊý¾Ý¿âµÄÎļþ¼Ð£¬µÚ¶þÖÖÊÇʹÓÃmysqldumpµÄ·½Ê½À´±¸·ÝÊý¾Ý¿âµ«ÊÇÒª¼ÓÉÏ"--master-data " Õâ¸ö²ÎÊý£¬½¨ÒéʹÓõÚÒ»ÖÖ·½·¨À´±¸·ÝÊý¾Ý¿â
c.²é¿´Ö÷·þÎñÆ÷µÄ״̬
mysql> show master statusG;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| mysql-bin.003 | 73 | test | manual,mysql |
+---------------+----------+--------------+------------------+
¼Ç¼File ºÍ Position ÏîÄ¿µÄÖµ£¬ÒÔºóÒªÓõġ£
d.È»ºó°ÑÊý¾Ý¿âµÄËø¶¨´ò¿ª
mysql> UNLOCK TABLES;
4¡£ÉèÖôӷþÎñÆ÷
a.Ê×ÏÈÉèÖÃÊý¾Ý¿âµÄÅäÖÃÎļþ
server-id=n //ÉèÖÃÊý¾Ý¿âidĬÈÏÖ÷·þÎñÆ÷ÊÇ1¿ÉÒÔËæ±ãÉèÖõ«ÊÇÈç¹ûÓжą̀´Ó·þÎñÆ÷Ôò²»ÄÜÖØ¸´¡£
master-host=db-master.mycompany.com //Ö÷·þÎñÆ÷µÄIPµØÖ·»òÕßÓòÃû
master-port=3306 //Ö÷Êý¾Ý¿âµÄ¶Ë¿ÚºÅ
master-user=pertinax //ͬ²½Êý¾Ý¿âµÄÓû§
master-password=freitag //ͬ²½Êý¾Ý¿âµÄÃÜÂë
master-connect-retry=60 //Èç¹û´Ó·þÎñÆ÷·¢ÏÖÖ÷·þÎñÆ÷¶Ïµô£¬ÖØÐÂÁ¬½ÓµÄʱ¼ä²î
report-host=db-slave.mycompany.com //±¨¸æ´íÎóµÄ·þÎñÆ÷
b.°Ñ´ÓÖ÷Êý¾Ý¿â·þÎñÆ÷±¸·Ý³öÀ´µÄÊý¾Ý¿âµ¼Èëµ½´Ó·þÎñÆ÷ÖÐ
c.È»ºóÆô¶¯´ÓÊý¾Ý¿â·þÎñÆ÷£¬Èç¹ûÆô¶¯µÄʱºòûÓмÓÉÏ"--skip-slave-start"Õâ¸ö²ÎÊýÔò½øÈëµ½mysqlÖÐ
mysql> slave stop; //Í£Ö¹slaveµÄ·þÎñ
d.ÉèÖÃÖ÷·þÎñÆ÷µÄ¸÷ÖÖ²ÎÊý
mysql> CHANGE MASTER TO
-> MASTER_HOST="master_host_name", //Ö÷·þÎñÆ÷µÄIPµØÖ·
-> MASTER_USER="replication_user_name", //ͬ²½Êý¾Ý¿âµÄÓû§
-> MASTER_PASSWORD="replication_password", //ͬ²½Êý¾Ý¿âµÄÃÜÂë
-> MASTER_LOG_FILE="recorded_log_file_name", //Ö÷·þÎñÆ÷¶þ½øÖÆÈÕÖ¾µÄÎļþÃû(Ç°ÃæÒªÇó¼ÇסµÄ²ÎÊý)
-> MASTER_LOG_POS=recorded_log_position; //ÈÕÖ¾ÎļþµÄ¿ªÊ¼Î»ÖÃ(Ç°ÃæÒªÇó¼ÇסµÄ²ÎÊý)
e.Æô¶¯Í¬²½Êý¾Ý¿âµÄÏß³Ì
mysql> slave start;
²é¿´Êý¾Ý¿âµÄͬ²½Çé¿ö°É¡£Èç¹ûÄܹ»³É¹¦Í¬²½ÄǾ͹§Ï²ÁË£¡
²é¿´Ö÷´Ó·þÎñÆ÷µÄ״̬
mysql> SHOW PROCESSLISTG //¿ÉÒԲ鿴mysqlµÄ½ø³Ì¿´¿´ÊÇ·ñÓмàÌýµÄ½ø³Ì
Èç¹ûÈÕ־̫´óÇå³ýÈÕÖ¾µÄ²½ÖèÈçÏÂ
1.Ëø¶¨Ö÷Êý¾Ý¿â
mysql> FLUSH TABLES WITH READ LOCK;
2.Í£µô´ÓÊý¾Ý¿âµÄslave
mysql> slave stop;
3.²é¿´Ö÷Êý¾Ý¿âµÄÈÕÖ¾ÎļþÃûºÍÈÕÖ¾ÎļþµÄposition
show master status;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_do_db | Binlog_ignore_db |
+---------------+----------+--------------+------------------+
| louis-bin.001 | 79 | | mysql |
+---------------+----------+--------------+------------------+
4.½â¿ªÖ÷Êý¾Ý¿âµÄËø
mysql> unlock tables;
5.¸üдÓÊý¾Ý¿âÖÐÖ÷Êý¾Ý¿âµÄÐÅÏ¢
mysql> CHANGE MASTER TO
-> MASTER_HOST="master_host_name", //Ö÷·þÎñÆ÷µÄIPµØÖ·
-> MASTER_USER="replication_user_name", //ͬ²½Êý¾Ý¿âµÄÓû§
-> MASTER_PASSWORD="replication_password", //ͬ²½Êý¾Ý¿âµÄÃÜÂë
-> MASTER_LOG_FILE="recorded_log_file_name", //Ö÷·þÎñÆ÷¶þ½øÖÆÈÕÖ¾µÄÎļþÃû(Ç°ÃæÒªÇó¼ÇסµÄ²ÎÊý)
-> MASTER_LOG_POS=recorded_log_position; //ÈÕÖ¾ÎļþµÄ¿ªÊ¼Î»ÖÃ(Ç°ÃæÒª6.Æô¶¯´ÓÊý¾Ý¿âµÄslave
mysql> slave start;