Centos-Server-Mysql服务(主从复制)

 

  
  
  
  
  1. 前提:分别使用上述安装脚本安装MySQL主从服务器,具体环境如下:  
  2. 主(10.1.1.91),从(10.1.1.78)  
  3. MySQL版本5.1.50,主从版本最好一致。  
  4. 涉及到的相关配置文件变更my.cnf,selinux,iptables
  5. (后两者属于附加项,如果已经做了可以省略)  
  6. |------|       |-----|  
  7. |Master|-------|Slave|  
  8. |------|       |-----|  
  9. 10.1.1.91      10.1.1.78 
  
  
  
  
  1. A. 
  2. 10.1.1.91-主服务需要修改内容:(并重启启动mysql) 
  3. #vim /etc/my.cnf 
  4. #my.snf这个文件在安装过程中已经拷贝到/etc目录下, 
  5. #如果没有请进之前mysql源码包解压目录的support-files/目录下进行拷贝, 
  6. #在support-files/的目录下并不是同名文件,此目录下有my-small.cnf,my-large.cnf等,可以根据需求拷贝到/etc目录下 
  7. [client] 
  8. port        = 3306 
  9. socket      = /usr/local/mysql/tmp/mysql.sock 
  10.  
  11. [mysqld] 
  12. port        = 3306 
  13. socket      = /usr/local/mysql/tmp/mysql.sock 
  14. skip-external-locking  #不使用系统锁定,要使用myisamchk,必须关闭服务器 
  15. key_buffer_size = 256M 
  16. max_allowed_packet = 1M 
  17. table_open_cache = 256 
  18. sort_buffer_size = 1M 
  19. read_buffer_size = 1M 
  20. read_rnd_buffer_size = 4M 
  21. myisam_sort_buffer_size = 64M 
  22. thread_cache_size = 8 
  23. query_cache_size16M 
  24. thread_concurrency = 8 
  25.  
  26.  
  27. ########如下为添加项######## 
  28. log-bin=/data/dbdata/mysql-bin  #开启mysql二进制日志 
  29. binlog-do-db=test               #这里只记录test库的二进制日志 
  30. sync_binlog=1                   #设置binlog有更新时刷新到磁盘 
  31. binlog_format=mixed             #设置binlog的复制模式为mixed(statement,row) 
  32. #1. Row 
  33. #日志中会记录成每一行数据被修改的形式,然后在 slave 端再对相同的数据进行修改。 
  34. #2. Statement 
  35. #每一条会修改数据的 SQL 都会记录到 master 的 bin-log 中。slave 在复制的时候 SQL 进程会解析成和原来 master 端执行过的相同的 SQL 再次执行。 
  36. #3.Mixed取1-2两者之间 
  37. server-id   = 1                 #设置mysql_id(这个为主,从的可以是2,3,4.....) 
  38. ############################ 
  39.  
  40.  
  41. [mysqldump] 
  42. quick 
  43. max_allowed_packet = 16M 
  44.  
  45. [mysql] 
  46. no-auto-rehash 
  47.  
  48. [myisamchk] 
  49. key_buffer_size = 128M 
  50. sort_buffer_size = 128M 
  51. read_buffer = 2M 
  52. write_buffer = 2M 
  53.  
  54. [mysqlhotcopy] 
  55. interactive-timeout 
  56. #保存退出,重新启动Mysql  
  57. #servier mysqld restart or /etc/init.d/mysqld restart or /usr/local/mysql/bin/mysqld start 
  58.  
  59. B. 
  60. 登录10.1.1.91-主服务器上进行帐号授权(创建一个负责同步的帐号,严格意义上需要控制好权限),这边测试授予replication slave权限 
  61. #mysql -uroot -p123456 
  62. #mysql>grant replication slave on *.* to 'replication'@'10.1.1.78' identified by '123456'; (授权replication帐号(此帐号可以自行变更,切记勿忘)为replication slave权限) 
  63. #mysql>flush privileges;(刷新权限列表) 
  64. #mysql>flush tables  with read lock;(设置读锁定有效-确保没有数据库操作,便于获得一个一致性的快照) 
  65. #mysql>show master status;(出现类似如下表) 
  66. +------------------+----------+ 
  67. | File             | Position | 
  68. +------------------+----------+ 
  69. | mysql-bin.000018 |      106 |  
  70. +------------------+----------+ 
  71. 1 row in set (0.00 sec) 
  72. #注意记录好'File'跟'Position' 
  73.  
  74. C. 
  75. 导出数据10.1.1.91主服务器中需要同步的数据,导入到10.1.1.78从服务中 
  76. #mysqldump -uroot -p123456 -l test >test.sql(记住导出的路径) 
  77. 我这里通过sftp将数据拷贝到10.1.1.91上 
  78. #sftp 10.1.1.78 
  79. sftp>put test.sql(将test.sql上传至10.1.1.78,如果数据大的话可以使用其他工具进行拷贝),确定上传成功exit退出 
  80.  
  81. D. 
  82. 确认主服务器数据库备份成功,恢复主数据库写的操作 
  83. #mysql -uroot -p123456 
  84. #mysql>unlock tables; 
  85.  
  86. E. 
  87. 10.1.1.78-从服务器需要修改的内容: 
  88. #vim /etc/my.cnf(关于my.cnf文件在主服务器上有说明) 
  89. [client] 
  90. port        = 3306 
  91. socket      = /usr/local/mysql/tmp/mysql.sock 
  92.  
  93. [mysqld] 
  94. port        = 3306 
  95. socket      = /usr/local/mysql/tmp/mysql.sock 
  96. skip-external-locking  #不使用系统锁定,要使用myisamchk,必须关闭服务器 
  97. key_buffer_size = 256M 
  98. max_allowed_packet = 1M 
  99. table_open_cache = 256 
  100. sort_buffer_size = 1M 
  101. read_buffer_size = 1M 
  102. read_rnd_buffer_size = 4M 
  103. myisam_sort_buffer_size = 64M 
  104. thread_cache_size = 8 
  105. query_cache_size16M 
  106. thread_concurrency = 8 
  107.  
  108. #############添加修改内容如下##### 
  109. #log-bin=mysql-bin 
  110. binlog_format=mixed    #设置binlog的复制模式为mixed 
  111. server-id   = 2        #设置server-id为2,这里表示从服务器 
  112. replicate-do-db=test   #只同步test库 
  113. log-slave-updates      #同步后记录二进制日志 
  114. sync_binlog=1          #每经过1次日志写操作就把日志文件写入硬盘一次 
  115. slave-net-timeout=60   #slave连接超时60s 
  116. skip_slave_start=1 
  117. ################################ 
  118.  
  119.  
  120. [mysqldump] 
  121. quick 
  122. max_allowed_packet = 16M 
  123.  
  124. [mysql] 
  125. no-auto-rehash 
  126.  
  127. [myisamchk] 
  128. key_buffer_size = 128M 
  129. sort_buffer_size = 128M 
  130. read_buffer = 2M 
  131. write_buffer = 2M 
  132.  
  133. [mysqlhotcopy] 
  134. interactive-timeout 
  135.  
  136. #保存退出,重新启动Mysql  
  137. #servier mysqld restart or /etc/init.d/mysqld restart or /usr/local/mysql/bin/mysqld start 
  138.  
  139.  
  140. F. 
  141. 刚刚步骤B中提到的'File'跟'Position',在这里起作用了 
  142. 登录从服务器(10.1.1.78) 
  143. #mysql -uroot -p123456 
  144. #mysql>change master to master_host='10.1.1.91',master_user='replication',master_password='123456',master_log_file='mysql-bin.000018',master_log_pos=106
  145. #确保上述master_log_file和master_log_pos,跟刚刚记录的File,Position一致 
  146. #start slave;(启动slave) 
  147. #show slave status\G(出现如下信息,表示成功) 
  148. ------------------------------------------- 
  149.     Master_Host: 10.1.1.91              #主服务器IP 
  150.     Master_User: replication            #授权帐号 
  151.     Master_Port: 3306                   #主服务器端口 
  152.     Connect_Retry: 60                   #连接重试60s 
  153.     Master_Log_File: mysql-bin.000018   #主服务器的binlog文件 
  154.     Read_Master_Log_Pos: 106            #同步读取二进制日志位置 
  155.     Relay_Log_File: s-relay-bin.000003 
  156.     Relay_Log_Pos: 251 
  157.     Relay_Master_Log_File: mysql-bin.000018 
  158.     Slave_IO_Running: Yes               #正常情况必须为YES 
  159.     Slave_SQL_Running: Yes              #正常情况必须为YES 
  160.     Replicate_Do_DB: test               #同步的数据库是'test' 
  161. ------------------------------------------- 
  162.  
  163. #证实同步,请在主服务器上的test库中创建相关列表 

 

问题集锦:

1.在执行主从同步change master的时候出现
“ ERROR 1201 (HY000): Could not initialize master!”

原因:之前数据库做过主从 解决办法:
mysql>stop slave;
mysql>reset slave;(这个步骤重要)
mysql>change master to master_host='10.1.1.91',master_user='replication',master_password='123456',master_log_file='mysql-bin.000018',master_log_pos=106;
mysql>start slave;
mysql>show slave status\G
问题解决

2.出现
MySQL manager or server PID file could not be found! [FAILED]
Starting MySQL.Manager of pid-file quit without updating fi[FAILED]
解决办法:
A-1.请确认/data/dbdata目录下面是否有之前安装残留的文件,将其rm掉;
A-2.rm掉残留文件,再rm掉/usr/local/mysql/tmp/mysql.sock,这个在启动的时候会提示连接不上这个;
A-3.确认my.cnf文件拷贝正确,mysql存储目录的权限/data/dbdata隶属与mysql:mysql;
A-4.确认SElinux关闭,检查是有有其他程序使用3306端口;
A-5.确定上述步骤检测OK,重新/usr/local/mysql/bin/mysql_install_db --user=mysql &
A-6.再次启动Mysqld(service mysqld restart)/etc/init.d/mysqld start

3.如果是在Ubuntu下使用Mysql,默认情况下是拒绝远程登录的,这里我们需要修改如下配置,重启Mysql服务
配置文件的修改,my.cnf的存放路径请根据自己实际安装的进行查看,若不知可以使用find / -name my.cnf查看,后者自行找其他方法
#sudo vim /etc/mysql/my.conf
找到 bind-address = 127.0.0.1 登录mysql添加用户并且授权用户允许远程连接
mysql>grant all on *.* 'root'@'%' identified by '123456';
mysql>flush privileges;

上面两句命令的意思是允许使用root帐号远程登录,并授予所有权限,并且刷新权限表,在真实环境下请注意用户对表的控制权限,我这边只是方便测试使用
4.系统时间不一致导致同步不成功
主从两端分别执行date命令查看,时间是否一致,若不一致请修改.


 

你可能感兴趣的:(数据库,backup,agent,Mysql.Master)