Ubuntu18.04-MySQL8.0-表名大小写敏感-远程连接

1.卸载

  • 停止服务
sudo service mysql stop
  • 删除mysql服务
sudo apt-get remove mysql-server 
  • 删除其他组件
sudo apt-get autoremove
  • 删除残留配置文件
sudo dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P

过程中会弹出页面询问是否删除数据,全选yes

2.下载安装

https://dev.mysql.com/get/mysql-apt-config_0.8.11-1_all.deb
默认下载到~/Downloads/路径下

sudo dpkg -i ~/Downloads/mysql-apt-config_0.8.11-1_all.deb

更新仓库

sudo apt-get update

安装mysql服务

sudo apt-get install mysql-server

选好ok回车

安装选项.png

输入两次root密码

root账户密码.png

第一个官方推荐的,回车

认证方式.png

查看服务是否启动

ps -ef | grep mysql

启动了

mysql    29734     1  0 11:34 ?        00:00:10 /usr/sbin/mysqld

如果没有启动,启动服务

sudo service mysql restart

3.表名查询忽略大小写

如果使用默认安装路径,mysqldump命令直接使用。手动设置了安装目录,进入目录,终端 bin/mysqldump 代替 mysqldump

将初始库mysql导出到桌面,保存为mysqldump.sql文件,弹出提示时输入前面填写的root密码

mysqldump  -h localhost -u root -p mysql > ~/Desktop/mysqldump.sql

停止服务

sudo service mysql stop

将mysql的数据文件移动到临时目录下
这个动作相当于将所有数据库清空,有重要数据记得备份

sudo mv /var/lib/mysql /tmp/mysql

创建同名文件夹

sudo mkdir /var/lib/mysql

设置该目录及其子目录的群组(不用担心系统上无此用户)

sudo chown -R mysql:mysql /var/lib/mysql

设置群组读写权限

sudo chmod 750 /var/lib/mysql

编辑配置文件

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]下添加lower_case_table_names=1

[mysqld]
lower_case_table_names=1
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
log-error       = /var/log/mysql/error.log

然后手动初始化MySQL。
defaults-file默认安装路径为/etc/mysql/my.cnf,手动安装需要更改。

sudo mysqld --defaults-file=/etc/mysql/my.cnf --initialize lower_case_table_names=1 --user=mysql --console

再次查看/var/lib/mysql目录权限

ll -d /var/lib/mysql

没问题

drwxr-x--- 5 mysql mysql 4096 12月 25 13:11 /var/lib/mysql/

如果群组和权限不一致再次执行

sudo chown -R mysql:mysql /var/lib/mysql
sudo chmod 750 /var/lib/mysql

重新开启服务

sudo service mysql restart

登陆mysql,密码处直接回车

mysql -u root -p

登陆后查询

SHOW VARIABLES where Variable_name like 'lower%';

lower_case_table_names=1,没问题

mysql> SHOW VARIABLES where Variable_name like 'lower%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_file_system | OFF   |
| lower_case_table_names | 1     |
+------------------------+-------+
2 rows in set (0.01 sec)

查看数据库,少了sys

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.01 sec)

切换到mysql

use mysql;

导入前面导出的mysql

mysql> source ~/Desktop/mysqldump.sql
Query OK, 0 rows affected (0.00 sec)
.....
.....

退出

mysql> exit;
Bye

执行mysql_upgrade命令创建sys

sudo mysql_upgrade

登陆mysql测试,root密码是安装时设置的密码

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| haha           |
+----------------+
1 row in set (0.00 sec)

都没报错,完成

mysql> select * from haha;
Empty set (0.00 sec)

mysql> select * from HAha;
Empty set (0.00 sec)

说明

MySQL8.0的lower_case_table_names只有在服务初始化时才能配置,服务初始化后,更改lower_case_table_names设置,重启服务会报错。
这里将数据移除,采用手动初始化的方式再次初始服务,避免错误产生。

主要参照这个回答:https://stackoverflow.com/questions/53103588/lower-case-table-names-1-on-ubuntu-18-04-doesnt-let-mysql-to-start/53175727#53175727

手动初始化参数的官方说明:https://dev.mysql.com/doc/refman/8.0/en/data-directory-initialization-mysqld.html (windows的配置可以参考这里)

4.允许远程访问

登陆MySQL,执行下面语句

UPDATE mysql.user SET Host = '%' WHERE (Host = 'localhost') and (User = 'root');
mysql> UPDATE mysql.user SET Host = '%' WHERE (Host = 'localhost') and (User = 'root');
Query OK, 1 row affected (0.15 sec)
Rows matched: 1  Changed: 1  Warnings: 0

然后刷新一下

flush privileges;

在其他电脑上尝试连接

mysql -h 192.168.0.148 -P 3306 -u root -p

还是不行重启下mysql服务

说明

以前版本的配置文件上需要注释bind-address = 127.0.0.1,但8.0版本已经没有这个键值对,所以配置文件无需修改

远程一直不能连接,尝试ping下地址,ifconfig查看ip地址是否正确

可以参考这篇文章进行调试:https://blog.csdn.net/chengyuqiang/article/details/54285857

5.中文编码

MySQL8.0似乎不需要修改,登陆数据库查看

mysql> show variables like '%char%';
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | utf8mb4                        |
| character_set_connection | utf8mb4                        |
| character_set_database   | utf8mb4                        |
| character_set_filesystem | binary                         |
| character_set_results    | utf8mb4                        |
| character_set_server     | utf8mb4                        |
| character_set_system     | utf8                           |
| character_sets_dir       | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.03 sec)

mb4就是most bytes 4的意思,专门用来兼容四字节的unicode,utf8mb4是utf8的超集

6.数据库导出报错

本地8.0版本,使用mysqldump命令导出远程数据库失败

mysqldump -h IP地址 -P 端口号 -u root -p  数据库名称 >文件名.sql
$ mysqldump -h xxx.xxx.x.xxx -P xxx -u xxx -p  xxx >xxx.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
mysqldump: Couldn't execute 'SELECT COLUMN_NAME,                       
JSON_EXTRACT(HISTOGRAM, '$."number-of-buckets-specified"')                
FROM information_schema.COLUMN_STATISTICS                
WHERE SCHEMA_NAME = 'topbaby_dev' AND TABLE_NAME = 'balanceofaccount';'
: Unknown table 'column_statistics' in information_schema (1109)

新版的mysqldump默认启用了一个新标志,通过--column-statistics=0来禁用

$ mysqldump --column-statistics=0 -h xxx.xxx.x.xxx -P xxx -u xxx -p  xxx >xxx.sql

完成。

(未测)修改配置文件
[mysqldump]下插入column-statistics=0

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
column-statistics=0
lower_case_table_names=1
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
log-error       = /var/log/mysql/error.log

但是重启服务会报错,可能也是需要在初始化前配置,这个就没有测试了。
参考问题:https://serverfault.com/questions/912162/mysqldump-throws-unknown-table-column-statistics-in-information-schema-1109

后续踩到坑再补充...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容