欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

在windows系统下配置MySQL5.7主从复制遇到错误及解决方法分享

程序员文章站 2022-06-23 14:36:06
在windows下配置mysql5.7主从复制遇到错误及解决方法分享 在mysql5.7环境下 主从复制模式,从服务器重启后发现备份停止 手动输入 mysql> start slave;...

在windows下配置mysql5.7主从复制遇到错误及解决方法分享

在mysql5.7环境下 主从复制模式,从服务器重启后发现备份停止

手动输入

mysql> start slave;  #开启复制
结果为:
query ok, 0 rows affected (0.00 sec)

然而输入

mysql>show slave status\g   #查看主从复制是否配置成功

出现一些错误:slave_sql_running: no

*************************** 1. row ***************************
               slave_io_state: waiting for master to send event
                  master_host: 192.168.8.201
                  master_user: xiaokai
                  master_port: 3306
                connect_retry: 60
              master_log_file: mysql-bin.000003
          read_master_log_pos: 5383
               relay_log_file: xiaokai-pc-relay-bin.000002
                relay_log_pos: 1028
        relay_master_log_file: mysql-bin.000003
             slave_io_running: yes
            slave_sql_running: no
              replicate_do_db:
          replicate_ignore_db:
           replicate_do_table:
       replicate_ignore_table:
      replicate_wild_do_table:
  replicate_wild_ignore_table:

解决办法:

mysql>stop slave;#先停止复制线程
mysql> set global sql_slave_skip_counter=1;
mysql> slave start;#再开启复制

问题解决。


. 常见错误及解决方法总结

1)

error 1862 (hy000): your password has expired. to log in you must change it using a client that supports expired passwords.

遇到这个问题,可能是因为客户端mysql和服务端版本不一致,比如mysql-5.5.41连接5.7.12。


2.

timestamp with implicit default value is deprecated
执行mysql的“bin/mysqld --initialize --user=mysql”时报的错误。

原因是从mysql 5.6版本开始,timestamp的默认值已被标为deprecated,即如果类型为timestamp的字段,如果没有明确声明默认值为null,则默认为not null。如果设置timestamp字段为null,则自动存储当前的timestamp。


3.

can't find error-message file '/usr/local/mysql/share/errmsg.sys'
执行mysql的“bin/mysqld –initialize –user=mysql –explicit_defaults_for_timestamp”时报的错误。
这可能是因为之前有执行过,导致data目录不为空,通过“bin/mysqld –verbose –help|grep datadir”可以查看到默认的数据目录为/var/lib/mysql/。需要保证/var/lib/mysql/目录为空。或者通过指定参数–datadir改变数据目录,如“bin/mysqld –initialize –user=mysql –explicit_defaults_for_timestamp –datadir=/data/mysql/data”。

4)

 can't find error-message file '/usr/local/mysql/share/errmsg.sys'

对于错误:

can't find error-message file '/usr/local/mysql/share/errmsg.sys'. check error-message file location and 'lc-messages-dir' configuration directive.
从官网下载的mysql默认安装目录为/usr/local/mysql,如果实际为其它目录,则建议通过参数–basedir指定,否则会遇到不少安装问题。通过执行“bin/mysqld –verbose –help|grep basedir”即可看到“–basedir”的默认值为/usr/local/mysql/。

5)

 can't connect to local mysql server through socket
使用mysql试图进入mysql cli时,遇到错误:
error 2002 (hy000): can't connect to local mysql server through socket '/var/lib/mysql/mysql.sock' (2)
可能是因为客户端的版本和服务端的版本不一致,如果是这样,通常不存在/var/lib/mysql/mysql.sock。可以修改环境变量path来解决,让新安装的mysql的bin目录位于path前头,如:
export mysql_home=/usr/local/mysql

export path=$mysql_home/bin:$path

export manpath=$mysql_home/man:$manpath

6)

error 3021 (hy000): this operation cannot be performed with a running slave io thread;run stop slave io_thread for channel '' first.
在设置同步关系时,没有先停止slaves线程。解决办法为在设置同步关系之前,先执行下“stop slave”,以停止slave线程。

7)

error 2002 (hy000): can't connect to local mysql server through socket '/tmp/mysql.sock' (2)
执行mysql时报的错,是由于服务端mysqld和客户端mysql两者的mysql.sock文件位置不同。
解决办法:
使用“ps aux|grep mysqld”或“cat “/proc/pidof mysqld/cmdline””查看mysqld参数“–socket”的值,比如可能是“/var/lib/mysql/mysql.sock”。
显然不是mysql要找的“/tmp/mysql.sock”,指定下mysql的参数“-s”即可解决问题,如:mysql -s/var/lib/mysql/mysql.sock -uroot -p(坑爹的mysql-5.7.12,默认参数各种不一致)。

8)

mysqld: table 'mysql.plugin' doesn't exist

2016-05-18t03:33:56.235882z 0 [error] can't open the mysql.plugin table. please run mysql_upgrade to create it.
可以使用“bin/mysqld –initialize –user=mysql –explicit_defaults_for_timestamp”重做下初始化,即可解决。

9)

2016-05-18t03:41:02.970764z 0 [error] fatal error: can't open and lock privilege tables: table 'mysql.user' doesn't exist
办法同上。

10)

 2016-05-18t03:44:42.731483z 0 [error] --initialize specified but the data directory has files in it. aborting.
执行“bin/mysqld –initialize –user=mysql –explicit_defaults_for_timestamp”时报的错误,解决办法是清空data目录后再执行。