这两天一直在配置mysql数据库的多主一从的配置。其实现的思路是利用一个数据库启动两个实例(通过mysqld_multi),而这两个实例指向同一个数据库文件目录。但是配置过程中需要注意很多地方。
         首先,由于启用了innodb,所以在启动数据服务的时候,服务进程会对innodb数据文件ibdata1加锁,导致第二个实例一致报错,在报了N多个 错误之后,放弃读取数据文件。所以在第二个实例启动时无法读取innodb的表数据,导致这种方案无法同步两个都包含innodb表的镜像。尝试采用指定 数据文件的方式(innodb_data_file_path=ibdata2:98M:autoextend,ibdata2是把ibdata1复制获 得的,注意大小应该和现有的数据文件大小一致,为大于等于数据文件大小的最小整数),启动多个实例,仍然报错,只是错误信息变成了innodb的log文 件无法读取,因此继续设置innodb_log_group_home_dir=test-innodb-log,指定日志文件的存储位置(启动时,提示 无法找到日志文件,自动建立新的日志文件ib_logfile1,ib_logfile0)。启动成功(./bin/mysqld_multi --config-file=./var/my.cnf --mysqld=mysqld_safe start 1,2)。另外不能重复的还有如下选项:

  1. port     = 5507 
  2. socket   = var/mysql.sock2 
  3. pid-filevar/test-db2a.pid 


         在配置同步镜像时,还有很多需要注意,由于是存在两个同步,很多配置不能采用默认设置,否则两个同步进程会读取同一个文件,互相干扰。有如下几个配置:
主服务器信息文件:master-info-file = test-master.info
relay日志文件:relay-log = test-relay-bin
relay日志索引文件:relay-log-index = test-relay-bin.index
relay日志信息文件:relay-log-info-file=test-relay-log.info


完整的配置文件如下:

  1. [mysqld_multi] 
  2. mysqld = /home/work/local/test/mysql/bin/mysqld_safe 
  3. mysqladmin = /home/work/local/test/mysql/bin/mysqladmin 
  4.  
  5.  
  6. # Here follows entries for some specific programs 
  7.  
  8. # server 1 
  9. [mysqld1] 
  10. port     = 5506 
  11. socket   = /home/work/local/test/mysql/var/mysql.sock1 
  12. skip-locking 
  13. pid-file= /home/work/local/test/mysql/var/test-db1a.pid 
  14. datadir = /home/work/local/test/mysql/var 
  15. log=/home/work/local/test/mysql/var/test-db1.log 
  16. user = mysql 
  17. log-slow-queries=/home/work/local/test/mysql/var/slowquery1.log 
  18. long_query_time = 2 
  19. key_buffer = 256M 
  20. max_allowed_packet = 1M 
  21. read_buffer_size = 2M 
  22. myisam_sort_buffer_size = 64M 
  23. thread_cache = 32 
  24. query_cache_size = 32M 
  25. thread_concurrency = 2 
  26. max_connections=500 
  27. server-id     = 4 
  28. master-host     = localhost 
  29. master-user     =   replicuser 
  30. master-password =   123456 
  31. master-port   = 7890 
  32. #report-host = test-db3 
  33. master-connect-retry = 30 
  34. #replicate-rewrite-db=from_name->to_name 
  35. replicate-do-table = test.usertest 
  36. master-info-file = test-master.info 
  37. relay-log = relay1-relay-bin 
  38. relay-log-index = relay1-relay-bin.index 
  39. relay-log-info-file=relay1-relay-log.info 
  40. innodb_data_file_path=ibdata1:98M:autoextend 
  41. log-slave-updates 
  42. # binary logging - not required for slaves, but recommended 
  43. log-bin 
  44.  
  45.  
  46. # The MySQL server 2 
  47. [mysqld2] 
  48. port     = 5507 
  49. socket   = /home/work/local/test/mysql/var/mysql.sock2 
  50. skip-locking 
  51. pid-file= /home/work/local/test/mysql/var/test-db2a.pid 
  52. datadir = /home/work/local/test/mysql/var 
  53. log=/home/work/local/test/mysql/var/test-db2.log 
  54. user = root 
  55. log-slow-queries=/home/work/local/test/mysql/var/slowquery2.log 
  56. long_query_time = 2 
  57. key_buffer = 256M 
  58. max_allowed_packet = 1M 
  59. table_cache = 512 
  60. sort_buffer_size = 2M 
  61. read_buffer_size = 2M 
  62. myisam_sort_buffer_size = 64M 
  63. thread_cache = 32 
  64. query_cache_size = 32M 
  65. thread_concurrency = 2 
  66. max_connections=500 
  67. server-id     = 5 
  68. master-host     =   localhost 
  69. master-user     =   replicuser 
  70. master-password =   123456 
  71. master-port     = 3336 
  72. master-connect-retry=60 
  73. replicate-do-table = test2.user2 
  74. master-info-file = relay2-master.info 
  75. relay-log = relay2-relay-bin 
  76. relay-log-index = relay2-relay-bin.index 
  77. innodb_data_file_path=ibdata2:98M:autoextend 
  78. innodb_log_group_home_dir=relayt2-innodb-log/ 
  79. relay-log-info-file=relay2-relay-log.info 
  80. log-slave-updates 
  81. # binary logging - not required for slaves, but recommended 
  82. log-bin 
  83.  
  84. [mysqldump] 
  85. quick 
  86. max_allowed_packet = 16M 

本日志由 flyinweb 于 2009-10-29 09:11:41 发表,目前已经被浏览 9694 次,评论 4 次;

作者添加了以下标签: 多主一从复制同步

引用通告:http://www.517sou.net/Article/304/Trackback.ashx

评论订阅:http://www.517sou.net/Article/304/Feeds.ashx

相关文章

评论列表

  1. Gravatar
    2010-06-04 17:30:18 | # | 回复
    两个实例分别放在不同的 datadir 里面,会方便很多
  2. Gravatar
    jans1086
    2011-06-30 23:35:12 | # | 回复
    你好,我发现一个问题,就是从mysqld2同步过来的数据,在mysqld1的连接中都不出,要在mysql重启之后才能。请问这个有什么解决方法吗?期待你的答复。
  3. Gravatar
    flyinweb
    2011-07-17 11:53:47 | # | 回复
    @jans1086 不明白您的具体的意思是什么?
  4. Gravatar
    tyw
    2011-11-28 16:53:17 | # | 回复
    看不明白
(必填)
(必填,不会被公开)