Mysql主從方案的實現


Mysql主從方案介紹

 

mysql主從方案主要作用:

讀寫分離,使數據庫能支撐更大的並發。在報表中尤其重要。由於部分報表sql語句非常的慢,導致鎖表,影響前台服務。如果前台使用master,報表使用slave,那么報表sql將不會造成前台鎖,保證了前台速度。

發揚不同表引擎的優點。目前Myisam表的查詢速度比innodb略快,而寫入並發innodbmyIsam要好。那么,我們可以使用innodb作為master,處理高並發寫入,使用master作為slave,接受查詢。或在myisam slave中建立全文索引,解決innodb無全文索引的弱點。

熱備,slavemaster的數據准實時同步。

准備工作。先分別安裝兩台MYSQL

 

系統環境:

OSRHEL5.4

主:192.168.10.197

從:192.168.10.198

 

1、mysql 的安裝這里就不介紹了,詳見安裝文檔。

2、my.cnf配置

a、配置MASTER

點擊(此處)折疊或打開

  1. [client]
  2. port = 3306
  3. socket = /tmp/mysql.sock
  4. [mysqld]
  5. port = 3306
  6. socket = /tmp/mysql.sock
  7. basedir=/usr/local/mysql
  8. datadir=/home/mysqldata
  9. log-slow-queries=slow_query.txt
  10. log-bin=mysql-bin197
  11. long_query_time=2
  12. skip-locking
  13. skip-name-resolve
  14. skip-innodb
  15. bind-address=192.168.10.197
  16. max_allowed_packet = 256M
  17. query_cache_size=256M
  18. max_connections=2000
  19. max_connect_errors=10000
  20. key_buffer_size=6000M
  21. read_buffer_size=32M
  22. read_rnd_buffer_size = 32M
  23. myisam_sort_buffer_size=256M
  24. tmp_table_size=512M
  25. old-passwords
  26. interactive_timeout=60
  27. wait_timeout=60
  28. connect_timeout=120
  29. table_cache=8192
  30. thread_cache_size=256
  31. sort_buffer_size=64M
  32. back_log = 500
  33. thread_concurrency=32
  34. server-id=1
  35.  
  36. log-bin=mysql-bin240
  37.  
  38. binlog-do-db=phpcmsv9
  39.  
  40. binlog-ignore-db=mysql
  41.  
  42. expire_logs_days=10
  43. [mysqldump]
  44. quick
  45. max_allowed_packet = 1024M
  46. [mysql]
  47. no-auto-rehash
  48. [isamchk]
  49. key_buffer = 1024M
  50. sort_buffer_size = 32M
  51. read_buffer = 2M
  52. write_buffer = 2M
  53. [myisamchk]
  54. key_buffer = 1024M
  55. sort_buffer_size = 32M
  56. read_buffer = 2M
  57. write_buffer = 2M
  58. [mysqlhotcopy]
  59. interactive-timeout

 

注釋:紅色是修改的部分。

其中,作為主機,server-id必須為1.

binlog_do_db為需要復制的db。 binlog_ignore_db為忽略復制的db。需要增加DB的話,就增加相應的一行。

重啟master數據庫,運行檢查:

點擊(此處)折疊或打開

  1. mysql> show master status; #檢查是否以master形式啟動了。
  2. +---------------------+----------+--------------+------------------+
  3. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  4. +---------------------+----------+--------------+------------------+
  5. | mysql-bin240.000001 | 2342775 | phpcmsv9 | mysql |
  6. +---------------------+----------+--------------+------------------+
  7. 1 row in set (0.00 sec)
  8. mysql> show variables like "%log%";

 

#需要看到這樣的一行,說明binlog已經開啟了: log_bin | ON

 

master上為slave建立用戶

 

點擊(此處)折疊或打開

  1. mysql> grant replication slave, reload, super on *.* to 'backup'@'192.168.10.198' identified by '123';

這樣,主機配置完畢。
b
slave配置

點擊(此處)折疊或打開

  1. [client]
  2. port = 3306
  3. socket = /tmp/mysql.sock
  4. [mysqld]
  5. port = 3306
  6. socket = /tmp/mysql.sock
  7. basedir=/usr/local/mysql
  8. datadir=/home/mysqldata
  9. log-slow-queries=slow_query.txt
  10. log-bin=mysql-bin198
  11. long_query_time=2
  12. skip-locking
  13. bind-address=192.168.10.198
  14. skip-name-resolve
  15. skip-innodb
  16. max_allowed_packet = 256M
  17. query_cache_size=256M
  18. max_connections=2000
  19. max_connect_errors=10000
  20. key_buffer_size=6000M
  21. read_buffer_size=32M
  22. read_rnd_buffer_size = 32M
  23. myisam_sort_buffer_size=256M
  24. tmp_table_size=512M
  25. old-passwords
  26. interactive_timeout=60
  27. wait_timeout=60
  28. connect_timeout=120
  29. table_cache=8192
  30. thread_cache_size=256
  31. sort_buffer_size=64M
  32. back_log = 500
  33. thread_concurrency=8
  34.  
  35. server-id=2
  36.  
  37. master-host=192.168.10.197
  38.  
  39. master-user=backup
  40.  
  41. master-password=123
  42.  
  43. master-port=3306
  44. replicate-do-db=phpcmsv9
  45.  
  46. replicate-ignore-db=mysql
  47.  
  48. master-connect-retry=60
  49.  
  50. expire_logs_days=10
  51. [mysqldump]
  52. quick
  53. max_allowed_packet = 1024M
  54. [mysql]
  55. no-auto-rehash
  56. [isamchk]
  57. key_buffer = 1024M
  58. sort_buffer_size = 32M
  59. read_buffer = 2M
  60. write_buffer = 2M
  61. [myisamchk]
  62. key_buffer = 1024M
  63. sort_buffer_size = 32M
  64. read_buffer = 2M
  65. write_buffer = 2M
  66. [mysqlhotcopy]
  67. interactive-timeout

 

注釋:紅色部分為修改的地方

1.啟動主服務器和從服務器服務,在從服務器192.168.17.2上使用命令slave start啟動復制;

2.隨便使用命令show slave status;

如果出現主從復制報錯了

 

點擊(此處)折疊或打開

  1. mysql> show slave status \G;
  2. *************************** 1. row ***************************
  3. Slave_IO_State: Connecting to master
  4. Master_Host: 192.168.10.197
  5. Master_User: backup
  6. Master_Port: 3306
  7. Connect_Retry: 60
  8. Master_Log_File: mysql-bin240.000001
  9. Read_Master_Log_Pos: 2342431
  10. Relay_Log_File: localhost-relay-bin.000001
  11. Relay_Log_Pos: 4
  12. Relay_Master_Log_File: mysql-bin240.000001
  13. Slave_IO_Running: No
  14. Slave_SQL_Running: Yes
  15. Replicate_Do_DB: phpcmsv9
  16. Replicate_Ignore_DB: mysql
  17. Replicate_Do_Table:
  18. Replicate_Ignore_Table:
  19. Replicate_Wild_Do_Table:
  20. Replicate_Wild_Ignore_Table:
  21. Last_Errno: 0
  22. Last_Error:
  23. Skip_Counter: 0
  24. Exec_Master_Log_Pos: 2342431
  25. Relay_Log_Space: 106
  26. Until_Condition: None
  27. Until_Log_File:
  28. Until_Log_Pos: 0
  29. Master_SSL_Allowed: No
  30. Master_SSL_CA_File:
  31. Master_SSL_CA_Path:
  32. Master_SSL_Cert:
  33. Master_SSL_Cipher:
  34. Master_SSL_Key:
  35. Seconds_Behind_Master: NULL
  36. Master_SSL_Verify_Server_Cert: No
  37. Last_IO_Errno: 1130
  38. Last_IO_Error: error connecting to master 'backup@192.168.10.197:3306' - retry-time: 60 retries: 86400
  39. Last_SQL_Errno: 0
  40. Last_SQL_Error:
  41. 1 row in set (0.00 sec)
  42. ERROR:
  43. No query specified

 

這是由於MASTER沒有賦予權限的關系

3在從服務器192.168.17.2運行slave stop;停止復制命令

 

4輸入

點擊(此處)折疊或打開

  1. mysql>CHANGE MASTER to MASTER_HOST='192.168.15.197', MASTER_PORT=3306, MASTER_USER='backup', MASTER_PASSWORD='123', MASTER_LOG_FILE=’mysql-bin240.000001';, MASTER_LOG_POS=2342775;

 

 

5然后重新啟動slave start 命令后

點擊(此處)折疊或打開

  1. mysql> show slave status \G;
  2. *************************** 1. row ***************************
  3. Slave_IO_State: Waiting for master to send event
  4. Master_Host: 192.168.10.197
  5. Master_User: backup
  6. Master_Port: 3306
  7. Connect_Retry: 60
  8. Master_Log_File: mysql-bin240.000001
  9. Read_Master_Log_Pos: 2342775
  10. Relay_Log_File: localhost-relay-bin.000002
  11. Relay_Log_Pos: 598
  12. Relay_Master_Log_File: mysql-bin240.000001
  13. Slave_IO_Running: Yes
  14. Slave_SQL_Running: Yes
  15. Replicate_Do_DB: phpcmsv9
  16. Replicate_Ignore_DB: mysql
  17. Replicate_Do_Table:
  18. Replicate_Ignore_Table:
  19. Replicate_Wild_Do_Table:
  20. Replicate_Wild_Ignore_Table:
  21. Last_Errno: 0
  22. Last_Error:
  23. Skip_Counter: 0
  24. Exec_Master_Log_Pos: 2342775
  25. Relay_Log_Space: 757
  26. Until_Condition: None
  27. Until_Log_File:
  28. Until_Log_Pos: 0
  29. Master_SSL_Allowed: No
  30. Master_SSL_CA_File:
  31. Master_SSL_CA_Path:
  32. Master_SSL_Cert:
  33. Master_SSL_Cipher:
  34. Master_SSL_Key:
  35. Seconds_Behind_Master: 0
  36. Master_SSL_Verify_Server_Cert: No
  37. Last_IO_Errno: 0
  38. Last_IO_Error:
  39. Last_SQL_Errno: 0
  40. Last_SQL_Error:
  41. 1 row in set (0.00 sec)
  42. ERROR:
  43. No query specified

 

在從庫192.168.17.2 select查詢,發現后面插入的兩條語句已經同步過來了,隨后繼續插入測試沒有發現問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM