Mysql进行局域网内的数据库共享:如果发现有空格命名的数据库,
Mysql实现局域网数据库共享
当想要使用Mysql进行局域网内数据库共享时,千万一定要注意,进行实验的这几台电脑的ip地址需要在同一个网段 ,并且这几台电脑都需要安装的有MySQL服务。
image话不多说,开始肝!
image首先: 检查, 要发布数据库的A机和想要访问的B机是否在同一网段
你以为不用?在一个实验室网段就一样?劝你还是检查下吧:相信我,世界这么大,它每天都会给你惊喜的。
image“纸上得来终觉浅,绝知此事要躬行”
首先让A机的小伙伴,win+r 进入运行界面,输入cmd
image输入命令 ipconfig/all 查看ip地址,找到ipv4地址
image用同样的方法查看B机的ip地址
image一定要确认好ip在同一网段后,再进行下一步考虑。真的,不在同一网段真没必要整了,真的没意思,物理上都连不通,还想白嫖,这明摆着欺负老实人。
image不给资金还想外网也连通,这样的问题,就是再娴熟的技术也给他解决不了。
image为什么说这些?你去工业界实习搬几天砖就知道了,只能说“社会很单纯,复杂的是人”。
image另外,你在实习过程中,遇到不合理的项目需求一定要讲出来,你今天给他搞个APP,他明天就想让你根据手机壳来变换APP的颜色。
image遇事不决,眼角膜来凑????
image言归正传,幸好我们今天遇到的需求还算正常,确实在同一网段,还可以搞下局域网的部署。
一、进行数据库共享配置
点击win10系统图标旁边的放大镜, 输入mysql进行查找
image找到mysql命令行客户端,双击打开客户端
image按照提示输入密码
image输入完成后,按下回车,即可进入mysql界面
image输入以下命令可以查看mysql安装位置,以备不时之需
show variables like "%char%";
变量character_sets_dir对应的就是mysql安装位置
image查看数据库,找到要共享的数据库
show databases;
image
例如,我们需要共享的数据库为tcm data, 选择tcm data数据库
use tcm data;
真是惊喜莲莲,竟然报错了
image出现了,它出现了,巨坑它出现了!!!千万记得,以后再遇见mysql数据库中有空格命名的要么跑路,要么把建库人的头打歪!不要问我是怎么知道的
image经过检查发现,原因是,数据库名字带空格。好吧,然后开始改名字,把空格去掉,放心吧,不出意外的话,另一个坑应该就来了。
image 果然,经过一番研究,你会发现navicat是不能直接改数据库名字的 image image还好这个数据库不大,我们直接新建数据库tcmdata 把tcm data的数据表直接复制过来。
新建数据库tcmdata
在任意一数据库处,右键---“new database”(新建数据库)
image输入名字,字符集一般选择"utf8",排序一般选择“uft8_general_ci”,
image选完后点击ok,即可在左侧看到新建好的数据库
image对,就选这个没有空格的
开始复制表
将"tcm data"的表复制到tcmdata
image选择最上方菜单栏,Tools工具栏---"Data transfer"数据传输
image出现数据迁移对话框后,左侧表示数据源,右侧表示迁移目标
image在数据源处,点击database右侧倒立小三角,选中tcm data 数据库
image迁移目标(右边),选择好目标所在的localhost_3306
image选择目标数据库,tcmdata
image检查是否选中需要迁移的数据,一般默认全部选择了
image点击start就可以开始迁移了
image点击后,会出现确认对话框,点击ok即可
image正在迁移中......
image迁移完成后,文字最后一行会出现“Finished-Successfully” 对话框左上角会显示100%的字样,点击close关闭即可。
image数据库处右键----点击refresh刷新
image之后双击tcmdata查看,可以看到表格已经全部复制进来
image肝到这儿,终于可以喝口水,压压惊
image短暂的休息后,回到我们的主线任务:共享数据库
开始选择需要共享的数据库tcmdata
use tcmdata;
image
进行局域网访问共享
GRANT ALL PRIVILEGES ON *.* TO 'yourname'@'localhost' IDENTIFIED BY 'yourpassword';
出现错误
imageYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED BY '123456'' at line 1
开始填坑
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
image
然后再次,共享权限
grant select,delete,update,insert on tcmdata.* to 'root'@'183.170.55.28' identified by '123456';
仍然报错如下
imageERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by 123456
' at line 1
原因分析:这是因为在新版本的mysql(8.xx版本)中,创建账户和赋予权限是两套独立的命令体系。
解决办法:
创建用户
create user username@'183.170.55.47' identified by 'password';
image
赋予权限:
grant all on *.* to username@'%' with grant option;
运行结果如下
image刷新权限
flush privileges;
image
进入默认数据库
use mysql;
image
查看更新后的user表
select user, host from user;
image
开放端口3306
在防火墙防端开放端口3306的访问权限
image点击左侧的选项“高级设置”
image点击“入站规则”-----“新建规则”,进行规则设置
image选择“端口”---“下一步”
image在特定端口处填写“3306”---“下一步”
image默认的就是“允许连接”---“下一步”
image默认的就是全部类型的网络,直接点击“下一步”
image输入名称和描述
image以管理员身份启动CMD
image关闭,再重启mysql服务,在系统CMD命令行中输入
net stop mysql
出现服务名无效的错误
image这是因为没有将mysql注册到win服务里面去,在mysql命令行里输入,查看mysql安装路径。
show variables like "%char%";
image
根据这个路径C:\Program Files\MySQL\MySQL Server 8.0 在电脑端打开
在CMD中输入以下命令进入mysql的bin文件夹
cd C:\Program Files\MySQL\MySQL Server 8.0\bin
image
然后输入
mysqld --install
运行结果
image开启mysql服务
net start mysql
image
删除mysql下的data文件,右键---删除
image重新执行 mysqld --initialize 就可以在当前路径下生成data文件夹,
mysqld --initialize-insecure
再次执行net start mysql ,发现并没有成功启动mysql
image发现mysql没有启动,初步猜测是因为权限问题,于是,重新打开cmd
右键---以管理员身份运行
image运行后,发现仍然无法启动
image image于是进入路文件径C:\Program Files\MySQL\MySQL Server 8.0
image在下面新建my.txt
# MySQL client library initialization.
保存后,将名字改为my.ini作为mysql配置文件
image重启电脑
image开机后,再次开启mysql
net start mysql
这次,服务启动成功
image总结:重启电脑,可以解决90%的问题。
image二、测试共享是否成功
在B机(局域网内的另一台电脑)上输入命令:
mysql -h 183.170.55.28 -uroot -p
出现输入密码提示框后,输入密码
image发现出现链接错误
imageERROR 1130 (HY000): Host 'DESKTOP-P1D5LQJ' is not allowed to connect to this MySQL server
这是因为ip地址动态更新,我们在A机(共享数据库的主机)
进入cmd查询使用现在的ip地址
ipconfig/all
image
发现A机的IP变成了183.170.55.47
于是我们在B机上使用以下命令连接A机(共享数据库的主机)
mysql -h 183.170.55.47 -uroot -p
image
发现又出现新的问题
imageERROR 1045 (28000): Access denied for user 'root'@'183.170.55.28' (using password: YES)
原因分析:
我们没有给root用户授予权限,因为我们建的用户为“xwx”,
我们需要使用“xwx”用户连接数据库才行
mysql -h 183.170.55.47 -uxwx -p
image
发现登录成功
我们查看是否能看到共享的数据库
image发现并没有我们共享的tcmdata数据库!!!
image作为一名成年科研僧,生活在社会的底层,我们应该学会控制情绪了,你要告诉自己,自己一点都不难过,然后继续肝
image原因分析:
我想这可能是因为共享的时候没有选择到tcmdata(想要共享的数据库),我们授予tcmdata数据库的所有表的操作权限给xwx用户
在A机(具有数据库的主机)上执行命令
grant all on tcmdata.* to 'xwx'@'%';
image
刷新权限
flush privileges;
在B机(通过局域网连接数据库的主机)上退出mysql后,重新登录
\q
image
重新登录
image查看数据库,发现此时tcmdata已经可以查看到,这说明已经共享成功。
show databases;
image
查看数据库tcmdata
use tcmdata;
image
image
这说明,终于共享成功了!