ERROR 1356 (HY000): View ‘mysql.user‘ references invalid table(s) or column(s) or function(s) or def

部署某开源应用软件的体验环境,急需一个mysql数据库支持。对比了下mysql和mariadb,选择了mariadb。原因是以前用这个数据库挺顺手,兼容mysql,主要原因是它的二进制安装包特别小,下载快。

操作系统:ubuntu16.04
MariaDB版本:10.11.6。
安装方式:二进制安装包安装

以下是部署步骤

1、获取二进制包mariadb-10.11.6-linux-systemd-x86_64.tar.gz

地址:https://mariadb.org/download/?t=mariadb&p=mariadb&r=10.11.6&os=windows&cpu=x86_64&pkg=msi&m=gigenet

2、Root用户下顺次执行以下命令

# groupadd mysql
# useradd -g mysql mysql
# cd /usr/local
# tar -zxvpf /path-to/mariadb-VERSION-OS.tar.gz
# ln -s mariadb-VERSION-OS mysql
# cd mysql
# ./scripts/mariadb-install-db --user=mysql
# chown -R root .
# chown -R mysql data

3、测试mysql是否能正常启动,如果能启动,ctrl+c退出

#./bin/mysqld_safe --defaults-file=~/.my.cnf --user=mysql &

4、设置开机自启动

systemd文件是二进制包中写好的,只需要创建不存在的目录放进去即可

# cp support-files/systemd/mariadb.service /usr/lib/systemd/system/mariadb.service

# systemctl daemon-reload

5、用以下命令启动试试,肯定不行,报错看图

# systemctl start mariadb.service
# systemctl status mariadb.service

在这里插入图片描述

因为usr目录受保护(mariadb设置的安全策略),不能写入文件。所以官方给的方案是换个目录写入。比如

# mkdir /etc/systemd/system/mariadb.service.d/
# cat > /etc/systemd/system/mariadb.service.d/datadir.conf <<EOF
[Service]
ReadWritePaths=/usr/local/mysql/data
EOF
# systemctl daemon-reload

民间也有方案,比如关掉这个保护,处理办法参考如下

修改/usr/lib/systemd/system/mariadb.service文件
这两个配置项配空值
ProtectSystem=
ProtectHome=
# systemctl daemon-reload

再启动应该就没问题了

其它命令

# systemctl enable mariadb.service
# systemctl stop mariadb.service 

6、MySQL账号配置

安装完成后默认有两个用户root和mysql。都是不设置密码的。接下来是账号配置和远程客户端访问配置,给root账号设置个密码,然后开启远程访问权限

MariaDB [(none)]> select user();

在这里插入图片描述

MariaDB [(none)]> use mysql;
MariaDB [mysql]> select user, password from user;
MariaDB [mysql]> update user set password = password('123456') where user in ('root','mysql');

在这里插入图片描述

这几行命令完成,root用户就有密码了,数据库这事就结束了。
但是报错了
在这里插入图片描述
提示很明白,mysql.user是个视图不是表。第一反应是叹口气,唉,静下心来查文档吧。
这个是原因文档:https://mariadb.com/kb/en/authentication-from-mariadb-10-4/
这个是解决方案文档:https://mariadb.com/kb/en/alter-user/
文档比较零碎,找出来方便查看。登录后的修改密码的方案是使用alter user,看了下mysql的教程也是这么干的。

解决命令:

MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

推荐直接使用以下语句,权限和密码一次搞定
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

这时候远程连接访问还是会报错,请继续往下看
ERROR 1698 (28000): Access denied for user 'root'@'XXX'之类的

7、远程客户端访问配置

要想远程访问需要给mysql配置下远程访问权限。首选cnf配置文件配置,可以永久生效。

参考这篇文章
mariadb启动完成后可能找不到数据库的配置文件,因为它就没有生成
执行以下命令可以查看到mariadb数据库读取哪些默认文件以及以何种顺序读取,以及当前使用的都是些什么参数配置

# mariadbd --help --verbose

不出意外会看到这个
在这里插入图片描述

所以我们可以在家目录下创建一个.my.cnf隐藏文件,然后写入配置信息

vim ~/.my.cnf
写入以下内容
[mysqld]
skip-networking = 0
skip-bind-address

保存后重新启动mariadb服务使配置生效

# systemctl restart mariadb.service

然后防火墙开放3306端口

firewall-cmd --add-port=3306/tcp 
firewall-cmd --permanent --add-port=3306/tcp

然后远程客户端连接下数据库试试

参考:

https://mariadb.com/kb/en/installing-mariadb-binary-tarballs/
https://mariadb.com/kb/en/authentication-from-mariadb-10-4/
https://mariadb.com/kb/en/alter-user/
https://dba.stackexchange.com/questions/80232/mysql-cant-create-test-file-error-on-centos
https://mariadb.com/kb/en/configuring-mariadb-for-remote-client-access/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值