1、现状 :服务器A 从库;    

              服务器B 主库;

              关系:主从同步

    2、现添加一台服务器C为主库,同步服务器A---》同步服务器B



操作1、停止 /etc/init.d/xa-anaxxx-tomcat  stop   主从同步分析停止 ;

    2、停止 /etc/init.d/xa-colxxx-tomcat  stop   数据插入主库停止;

    3、MQ查看正常;

    4、停止服务器B 同步 stop slave ;

    5、确认server-id 值是唯一;

    6、在服务器C创建A同步账号;

       #注意:创建的账号为字母+数字;

    7、在服务器A 上change master to .....

    8、在服务器A SHOW SLAVE STATUS\G

       Last_IO_Errno: 1045 Last_IO_Error: error connecting to master

         排查:检查端口、网络是否畅通,(iptables)

               检查账号、密码是否正确,(空格检查)

               检查pos点是否正确;

      9、上述确认无误后,检查服务器(从库)C 错误日志

         提示:  未禁用DNS解析

           导致:   远程访问慢

           解决:  在[mysqld] 添加:skip-name-resolve 

                #不再进行反解析(ip不反解成域名),这样可以加快数据库的反应时间

         报错:  ignored in --skip-name-resolve mode.”Warning  (未处理)

          优化方法:http://bbs.51cto.com/thread-1062614-1-1.html 

     10、再次change master to  报错无法同步;

     11、在服务器C重新创建账号(字母+数字)且授权all 权限 10.2.24.%网段同步;

     12、在服务器A 尝试用服务器C创建的账号登陆,且无法登陆;

     13、检查字符集: show variables  like "%char%";

             slave1
    | character_set_client     | utf8                             |
    | character_set_connection | utf8                             |
    | character_set_database   | latin1                           |
    | character_set_filesystem | binary                           |
    | character_set_results    | utf8                             |
    | character_set_server     | latin1                           |
    | character_set_system     | utf8                             |
    | character_sets_dir       | /usr/local/mysql/share/charsets/ |

            master
    | character_set_client     | latin1                                    |客户端字符集
    | character_set_connection | latin1                                    |链接数据库字符集
    | character_set_database   | utf8                                      |数据库服务器中字符集使用
    | character_set_filesystem | binary                                    |
    | character_set_results    | latin1                                    |数据库给客户端返回时使用的字符集设定
    | character_set_server     | utf8                                      |服务器安装时指定的字符集设定
    | character_set_system     | utf8                                      |数据库系统使用的字符集设定
    | character_sets_dir       | /application/mysql-5.5.19/share/charsets/ |
       原因分析:由于数据库字符集不一致导致,导致创建的账号在远程登陆的时候无法识别;

       服务器A配置文件修改: #一般使用utf8

        [client]
        default-character-set=utf8
        [mysqld]
        character-set-server=utf8
        init_connect='SET NAMES utf8'

      

     14、删除原有用于同步账号,刷新权限后,查看账号没有删除;

         use mysql ; select * from user\G;

                           Host: 10.2.24.xx
                  User: sxxx

                   Password: *D26AD47137B28F4998C27561AA397B1ED3FBF0B1
                   Select_priv: N
                   Insert_priv: N
                   Update_priv: N
                   Delete_priv: N
                   Create_priv: N

          #账号创建时权限为all ,此处查看没有任何权限

          #在user 表中删除创建的账号,(账号、网段名称尽量复制黏贴系统查看的)

     15、重新创建账号 kong ,授权all

         #账号为全字母,且为小写

     16、在服务器A  登陆成功

     17、 使用新创建的账号(kong) change master to 同步成功

    18、导入数据测试字符集是否正常

    19、如果对已有的表无法进行操作(字符集导致),删除表结构重新创建。

        #可以到相对应的数据文件中删除相对应的表名

    20、重新建库、建表、导入数据测试、同步........


经验提示:mysql数据库中表名区分大小写

   修改: [mysqld]  #注意重启

         lower_case_table_names=1 

         #lower_case_table_names=1(1是不区分大小写,0是区分)

2015年4月8日主从不同步故障解决(字符集导致)_第1张图片

       

大小写区分提示:http://www.linuxidc.com/Linux/2007-12/9831.htm