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回车
输入两次root密码
第一个官方推荐的,回车
查看服务是否启动
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://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
后续踩到坑再补充...