对5.11-5.14的MySQL学习做个总结。起初想深入学习MySQL有关锁和事务的内容,但找到的视频是从linux环境搭建mysql开始讲起的,恰好自己linux忘的差不多了,也就跟着学了下去。结果他的linux是在Docker沙盒中运行的,Docker我是一点都没接触,正好趁此机会从Docker开始学习。结果一套流程走下来,花了三天时间还没有开始自己最初的学习目标。第四天经过群里大佬点拨成功实现虚拟机中mysql的允许外部访问。下面是从Docker开始的安(cai)装(keng)总结。
1 Docker相关
1.1 Docker安装过程中踩过的坑
我是直接安装了DockerToolBox工具集(Releases · docker-archive/toolbox · GitHub),本来以为一路next,再配个共享文件夹,最后输一次用户名密码就可以搞定,最后发现自己还是太天真。
1.1.1 Docker QuickStart Terminal缺少快捷方式
问题描述:因为我Oracle VM VirtualBox和Git之前都是安装过的,安装路径都是自定义的,所以桌面上的DQT快捷方式追踪不到Git的bash.exe
解决方法:右键DQT -> 属性 -> 修改‘目标’中的bash.exe路径
1.1.2 looks like something went wrong in step ‘looking for vboxmanage.exe’
问题描述:好不容易docker开了,结果蹦出来上面那句话,一个回车就退出了。。。
解决方法:墙裂推荐Docker安装的那些坑之“looks like something went wrong in step ‘looking for vboxmanage.exe’”_cheniie的博客-CSDN博客这篇博客,我遇到的问题和他一模一样,明明环境变量都配了,对应的路径下docker-machine.exe和VBoxManager.exe也都是有的。重装了好几遍,docker就是正常启动不了,最后真的重启一下就好了。大概真的是环境变量的配置要等重启后才生效?可能和start.sh有关,要重启这个进程才会让一些新的配置生效(留个疑问)
1.1.3 找不到共享文件夹路径
问题描述:docker开起来以后该创建linux容器了,因为从docker大仓库里pull太慢,所以我找了个centOS的tar包准备load下来。但docker找不到放在VirtualBox自动挂载的共享文件夹里面的tar包。
解决方法:一番操作后,我感觉是共享文件夹出问题了,虚拟机的共享文件夹是和本地关联的,而docker是由虚拟机启动的,虚拟机相当于docker的宿主机,虚拟机和本地机的共享文件夹和docker有关系吗?docker是有关于挂载本地目录的方法,但毕竟docker不是我这个阶段的学习重点,所以最后还是先绕过这个坑,直接用WinSCP手动拖了。
2 Linux下MySQL安装相关
第二天开始搞Linux下MySQL的安装,下面是官方文档提供的mysql安装流程
shell> groupadd mysqlshell> useradd -r -g mysql mysqlshell> cd /usr/localshell> tar zxvf /path/to/mysql-VERSION-OS.tar.gzshell> ln -s full-path-to-mysql-VERSION-OS mysqlshell> cd mysqlshell> mkdir mysql-filesshell> chmod 770 mysql-filesshell> chown -R mysql .shell> chgrp -R mysql .shell> bin/mysqld --initialize --user=mysql# MySQL 5.7.6 and upshell> bin/mysql_ssl_rsa_setup# MySQL 5.7.6 and upshell> chown -R root .shell> chown -R mysql data mysql-filesshell> bin/mysqld_safe --user=mysql &# Next command is optionalshell> cp support-files/mysql.server /etc/init.d/mysql.server
2.1 MySQL安装踩过的坑
安装的时候没什么大问题,网上常见的什么data文件夹不存在什么的坑我都没遇到过,安装之后的使用出问题了。mysql的搭建过程比较顺利,开始膨胀,想试着让自己本地的navicat连接到linux里面的mysql。这也是我之前完全没有接触过的东西,一个接一个的报错。因为接下来的坑有的还没解决,有的解决的莫名其妙,部分就只做个记录(留坑)知道为什么无法连接到mysql了,因为docker启动容器的时候没有做端口映射!!!暴雨哭泣QAQ
2.1.1 mysqld: uncognized service
问题描述:这个问题一开始是不存在的,我的mysql是能正常启动并进入的,在我开始试着远程连接以后,改了些配置,然后就进不去了。。。奇葩的是,当时太晚洗洗睡了,第三天又能正常启动了。。。
一切结束后,回过头查看mysql的日志发现是3306的端口已经占用了,也就是说mysqld的服务已经开起来了,再试图启动mysqld就无法正常启动了。有个问题:如果端口被占用,会报uncognized service这个错吗,奇奇怪怪的。好几天前的错,我也懒得去重现了。但也学到了教训,遇到问题首先想到查日志!
2.1.2 ERROR 2002 (HY000):Can't connect to local MySQL server through socket '/tmp/mysql.sock'
问题描述:第三天可以正常启动mysql但进不去,真的是吐血了。给我报出ERROR 2002的错误,但我/tmp/mysql.sock明明是存在的,是我瞎改配置的时候给/tmp/mysql.sock设置了无法访问?只能这么想,真的晕了。
解决方法:用ln软连接,关联到var下面的mysql.sock,如果没有的话复制过去。ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
3 总结
3.1 docker
学会了基础的run,stop,start,ps,images,pull,load等命令行,理清了宿主机,沙盒,容器,镜像的概念和它们之间的关系。
3.2 linux
加深了对groupadd,useradd,cd,tar -zxvf,mkdir,ln,chown,chmod,chkconfig,ifconfig,lsof,cp等操作的印象,大致熟悉了linux安装mysql的流程。
解决了这个ERROR 2002能让mysql正常启动后,身心俱疲。毕竟之前在学校里用linux也全部都是可视化,一下子自己给自己挖这么多坑真的吃不太消。先回到正轨学MySQL相关的内容,之后再安排专门的时间系统深入学习docker和linux。
好了,四天时间饶了很大一圈,终于完成了,基本上所有的坑都被我踩了一遍...就是docker跑linux容器的时候没有做端口的映射,这个好像挺基础的,但我之前完全没有接触过docker。然后经过群里大佬的点拨,我发现docker里面完全不用搞linux,直接构建mysql就好,又是一个大坑。从四天前什么都不会一路踩坑,踩实了好多基础的坑。会自己搞服务器了,服务器里的安全组什么的有了接触;docker相关的端口映射和数据卷配置会搞;linux防火墙什么的也可以;mysql的权限相关以及各种命令行也都行。突然发现收获颇丰,竟然能不靠百度直接敲出大部分常用命令(docker,linux,mysql)。完结撒花!