zoukankan      html  css  js  c++  java
  • 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

    后续踩到坑再补充...

  • 相关阅读:
    【转】sublime text 2中Emmet插件8个常用的技巧
    程序猿崛起3——这一次,我用行动说话
    《Effective Java》学习笔记——积累和激励
    程序猿崛起2——互联网时代下的新潮流和新活法
    【非技术】做好属于自己的作品,然后让世界所有人都记住你
    【非技术】实现理想的第一步就是做自己
    【原创】程序猿崛起
    人生苦短,我用python——当我在玩python的时候我玩些什么
    一个新人如何学习在大型系统中添加新功能和Debug
    一个应届毕业生入职30天后的工作总结——作息
  • 原文地址:https://www.cnblogs.com/feng-jq/p/10282134.html
Copyright © 2011-2022 走看看