mysql报错:You must at least set –server-id to enable either a master or a slave

【场景】MySQL版本:Percona-Server 5.6.23,相关主要参数:

server_id = 3306
sync_binlog=1
gtid_mod = on
enforce-gtid-consistency = 1
log-slave-updates = 1
relay-log-purge = 1
relay_log_recovery = 1
master_info_repository = "TABLE"
relay_log_info_repository = "TABLE"

打算部署一个新的slave实例用于测试,图方便从master上直接把mysql这个系统库整个目录拷贝到slave上,进行初始化后,执行 CHANGE MASTER 配置主从复制,但却提示错误信息:

mysql> change master to master_host=’10.x.x.x’,master_port=3306,master_user=’repl’,master_password=’xx’,master_auto_position=1;
ERROR 1794 (HY000): Slave is not configured or failed to initialize properly. You must at least set –server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log.

看到这个错误信息,最直觉的反应是 server_id 设置错误了,比如和 master 的ID重复了。经过检查,确认不是这个原因,尝试检查了其他参数,也提示同样的错误。另外奇怪的是,上面的错误信息,未被记录到错误日志中。

【分析】应该注意到一点,上面提到初始化slave实例时,是从master上直接拷贝mysql系统库整个目录的,但并没有同时也拷贝 ibdata1、ib_logfile* 等InnoDB相关文件。其实问题就在这里,因为mysql系统库中,下面这几个表是采用InnoDB引擎的,所以初始化后,无法正常读写:

innodb_index_stats
innodb_table_stats
slave_master_info
slave_relay_log_info
slave_worker_info

经验证,通过客户端访问mysql库时,就会提示下面的错误信息了:

2015-05-04 17:21:25 14407 [Warning] InnoDB: Cannot open table mysql/innodb_index_stats from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.
2015-05-04 17:21:25 14407 [Warning] InnoDB: Cannot open table mysql/innodb_table_stats from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.
2015-05-04 17:21:25 14407 [Warning] InnoDB: Cannot open table mysql/slave_master_info from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.
2015-05-04 17:21:25 14407 [Warning] InnoDB: Cannot open table mysql/slave_relay_log_info from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.
2015-05-04 17:21:25 14407 [Warning] InnoDB: Cannot open table mysql/slave_worker_info from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.

【解决】本次案例中造成上述问题的原因是没有按照标准流程进行初始化,或者没有把master上的全部相关文件都拷贝到slave上去,导致mysql库下的几个InnoDB表无法使用。

解决的方法有两个:

1、删解除mysql系统库目录下上述几个表对应的ibd文件,执行 mysql_install_db 重新初始化;

2、从master将整个数据库全部文件都拷贝到slave上,并确认InnoDB的共享表空间文件及REDO LOG大小配置和master上是一致的;

时间: 2024-10-19 15:28:12

mysql报错:You must at least set –server-id to enable either a master or a slave的相关文章

mysql报错问题解决Character set 'utf8mb4' is not a compiled character set

mysql: Character set 'utf8mb4' is not a compiled character set and is not specified in the '/usr/share/mysql/charsets/Index.xml' file 报错的解决方法 1.由于日常程序使用了字符集utf8mb4,为了避免每次更新时,set names utf8mb4,就把配置文件改了,如下: 增加了mysql客户端的默认字符集设置 [[email protected]~]# vim

解决mysql报错Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’

启动mysql 报错: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) 1.先查看 /etc/rc.d/init.d/mysqld status 看看m y s q l 是否已经启动.另外看看是不是权限问题. 2.确定你的mysql.sock是不是在那个位置,mysql -u 你的mysql用户名 -p -S /var/lib/mysql/

MySQL报错“1366 - Incorrect integer value: '' XXXXXXX' at row 1 ”

出现这个错误是因为我在表中插入了一条含有中文字符的语句: 修改方法: my.ini中查找sql-mode 将 sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION", 修改为 sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION", 重启mysql后即可 . MySQL报错"1366 - Incorrect int

mysql报错:MySQL server version for the right syntax to use near 'type=InnoDB'

工作中使用sql语句建表时,mysql报了如下错误: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'type=InnoDB' at line 1 解决方案: 这个报错是由于某些版本的mysql不支持type写法,将type关键词改成ENGINE 即可. 版权声明:本文为博主原

连接mysql报错:error 2003 (hy000):can't connect to mysql server on 'localhost' (10061)

一.mysql 的bin目录下有个MySQLInstanceConfig.exe,运行就可以进行创建数据库实例,创建实例时也可以生成windows 服务,把服务设置成自动启动就可以了 二.安装在D盘的discuzz!打开后出现上述错误,请问应如何处理?winmysqladmin已经启动,但三色树上有一个小红点如果出现"ERROR 2003: Can't connect to MySQL server on 'localhost' (10061)",说明你的MySQL还没有启动.解决办法

Linux系统下启动MySQL报错:Neither host 'localhost.localdomain' nor 'localhost' could be looked up with

Linux系统下启动MySQL报错:Neither host 'localhost.localdomain' nor 'localhost' could be looked up with 摘要 Linux系统下安装完MySQL,启动MySQL报错:Neither host 'localhost.localdomain' nor 'localhost' could be looked up with... Linux系统下装完MySQL,然后重启动时报错: 解决方法:  查看cat /etc/h

Mysql报错Forcing close of thread 139 user: 'root'

最近重启服务器的mysql总是报大量的如下错误: 160330  9:14:26 [Warning] /usr/libexec/mysqld: Forcing close of thread 139  user: 'root' 160330  9:14:26 [Warning] /usr/libexec/mysqld: Forcing close of thread 138  user: 'root' 160330  9:14:26 [Warning] /usr/libexec/mysqld: 

Linux系统下启动MySQL报错:Neither host 'localhost.localdomain' nor 'localhost' could be looked up with

Linux系统下启动MySQL报错:Neither host 'localhost.localdomain' nor 'localhost' could be looked up with 摘要 Linux系统下安装完MySQL,启动MySQL报错:Neither host 'localhost.localdomain' nor 'localhost' could be looked up with... Linux系统下装完MySQL,然后重新启动动时报错: 解决方法:  查看cat /etc

一看便知linux下mysql报错ERROR 1044: Access denied for user: '@localhost' to database 'mysql'

错误信息:ERROR 1044: Access denied for user: '@localhost' to database 'mysql' linux下解决方案: mysql> use mysql ERROR 1044 (42000): Access denied for user 'root'@'localhost' to database 'mysql' mysql> exit Bye [[email protected] ~]# service mysqld stop如果该命令不