使用 MyCat 时发现一些问题,MyCat 底层使用 Druid 生成 SQL,导致创建的表名和列名都是大写,列名本身是不区分大小写的,所以问题不大。但表名的问题在不同的平台略有不同。在 Windows 中,MySQL 默认大小写不敏感。但在 Linux 中 MySQL 默认大小写敏感。这就导致如果通过 MyCat 执行的 SQL 使用的表名是小写,在 Linux 的 MySQL 数据库中创建的表名却是大写,此时通过 MyCat 执行 insert xxx 时就会报错,提示 xxx 表找不到。
对于 MySQL 8,如果是新安装的,直接修改配置即可,如果是已经存在的,需要删除数据目录,并且重新实例化 MySQL。
此操作会导致数据丢失,因此需要先备份数据库。
备份数据库:
mysqldump -uroot -p --all-databases > ~/download/sql/all.sql
停止服务:
sudo systemctl stop mysqld
备份数据目录:
sudo mkdir /backup
sudo cp -R /var/lib/mysql /backup/mysql_data
修改 mysql 配置文件中的大小写敏感设置:
lower_case_table_names=1
这一步操作必须在重新初始化 MySQL 实例之前完成。
删除数据目录:
sudo rm -rf /var/lib/mysql/*
重新初始化 MySQL 实例:
sudo mysqld --initialize --user=mysql --datadir=/var/lib/mysql
修改目录权限:
sudo chown -R mysql:mysql /var/lib/mysql
启动服务:
sudo systemctl start mysqld
临时登录密码可以从日志文件获取:
sudo cat /var/log/mysql/mysqld.log | grep password
使用临时密码登录并修改 root 密码:
mysql> alter user 'root'@'localhost' identified by 'Mysql@123';
Query OK, 0 rows affected (0.02 sec)
安全加固:
sudo mysql_secure_installation
重新导入数据:
mysql> source /home/icexmoon/download/sql/all.sql;
文章评论