我试图在CentOS上的2个mysql服务器之间设置主从复制。一旦设置,如果我创建一个名为' fakeDB'在主机上它在从机上创建它。真棒!但是,如果我然后尝试在主服务器上创建一个表,我会在slave上遇到这个错误:
Last_Errno: 1049
Last_Error: Error 'Unknown database 'fakeDB'' on query. Default database: 'fakeDB'. Query: 'create table tmp (name varchar(100))'
但是数据库存在于奴隶上!然后我开始在两台服务器上创建数据库和tmp表。我重置了所有内容然后尝试在主服务器上插入一行。然后我在奴隶上得到了这个错误:
Last_SQL_Errno: 1146
Last_SQL_Error: Error 'Table 'fakeDB.tmp' doesn't exist' on query. Default database: 'fakeDB'. Query: 'insert into tmp values ('asdf')'
但同样存在该数据库,两台服务器上的表也存在。我可以手动访问它们。以下是我在两台服务器上的my.cnf文件中设置的变量。
server-id = 1 #set as 2 for master
log_bin = /var/lib/mysql/mysql-bin.log
relay-log = /var/lib/mysql/mysql-relay-bin.log
binlog_do_db = fakeDB
我做错了什么?
答案 0 :(得分:3)
确定。我想到了。原来这是愚蠢的事情。我在slave上的配置文件中设置了此选项:
lower_case_table_names=1
因此,当我在主服务器上创建数据库为fakeDB
时,它在服务器上创建了fakedb
。所以在slave上我可以发出use fakeDB;
并且它可以正常工作,因为命令不区分大小写,但是从master发出的查询不是因为insert into fakeDB.tmp
失败,因为数据库名称是{{1} }。