风火家人开发记要

技术总结精华贴

Tag: MySql

原创, 服务器, , ,

使用docker的那些坑

依然是拿建网站来说明docker搭建mysql,php,nginx。使用PHP搭建起来的网站,自然 nginx要依赖php, php要依赖mysql,先看下所需容器 1.首先docker一个mysql,我使用的是mysql8.0,获取就不说了,这里直接docker –name 是为新容器起的名字, -p 本地端口:容器端口  -v 本地路径:容器路径, -v可设置很多路径映射,配置信息,日志信息,数据库存放路径,等等,记得还要同步本地时间哦,不然东八区的总差8小时, -e 环境变量,这个ROOT password 可以让我们避免首次登陆时去log查询初始密码的麻烦。 如果发现docker启动不起来,可以使用下面命令查看原因。 因为上面命令是我反复测试得到的命令,每次删除container后都可以直接使用则个命令启动,也不用担心重新配置信息或者数据丢失。出来下面的目录设置配置外,其他几个自定义目录都可以留空 通过下面的命令进入到 mysql8的容器中,使用上面的初始密码登录,需要提醒的是mysql8授权用户的时候,需要先创建相关用户,在赋予权限,不可一次执行。 安装mysql8还可以通过 docker-compose文件,配置如下 docker-compose.yml 现在我已经能正常使用数据库了,接下来是docker php-fpm。使用下面的命令创建php-fpm的容器,拉取php的fpm的最新版就行了 /data/www是我部署的网站,里面含有好几个站点,这里直接全部映射过去,php/extensions的相关扩展需要在启动docker后,进入docker中安装,比如下面是进入php的docker中安装pdo_mysql的扩展命令,最好在进入安装前,先打开php.ini中相应的扩展,如果不打开,创建后会在一个子目录下创建一个相应配置文件,并设置为开启,虽然结果都一样,但最好还是能统一在php.ini中配置。 这个docker命令中 我们使用 –link mysql8:mysql来把 mysql的网络段和php的网络段打通,我们可以进入php的docker中查看 /etc/hosts 里面会帮我们绑定mysql的IP,这样php就能够正常访问到mysql的网络中,以便访问数据库。 这里面的坑就是很多时候我们访问访问php地址的时候都是找不到文件,这个时候就需要你确保是否将网站路径映射到php docker中的正确位置了, 可以看到我使用了两次 -v /data/www的映射,这是因为才安装好的php docker 默认访问网站根目录是/etc/nginx/html, 我/data/www/中有html文件夹,所以我只绑定了前面, 而 -v /data/www:/data/www 则是因为我自定义了其他站点配置信息里面的目录都使用的/data/www/zizhandian的方式。 现在我们已经配置了几个php站点,需要使用nginx开启这些站点了,这里我们需要 –link下 php-fpm 这样就能让nginx正常访问到 php docker的网络段。 经过上面几条命令 我们已经能够正常访问php的站点了,php也能正常访问数据库了。 现在出现了另外一个问题,我有些服务是在 宿主机上开启的,那docker 容器怎么正常和宿主机通信呢? 当我查找这方面资料时,都是一些配置 iptable 防火墙策略,或者别名lo网络,真的有那么麻烦吗,我也被折腾了好几天,其实很简单。 docker 容器里面定义的网络段首个地址就是主机IP。这个我之所以被折腾很久,就是因为所谓的内网地址作怪。 我当前这台服务器内外IP是 172.17.1.4,我们分别进入 docker php-fpm 和 nginx80中查看hosts就会发现他们里面也绑定了,172.17.1.2 mysql,172.17.1.3 php-fpm, 172.17.1.4 nginx80 怎么回事呢,如果我们连主机内网IP 172.17.1.4却连到了nginx80上, 这里我们必须理解在 docker中的网络段他们都是相互独立的,当我们使用–link后 他们之间会通过host 绑定并且会在同一个网段呢, 那么我们的宿主机在docker里就是 172.17.1.1 这个初始IP,所以如果想连主机的IP,需要配置docker网络段的其实IP,不是127.0.0.1 也不是内网地址172.17.1.4。 这次docker学习的心得差不多就这些了。 另外一篇关于使用 Dockerfile 生成 PHP:FPM镜像的,并安装其他扩展的:使用php:fpm制作docker镜像并添加扩展redis,pdo_mysql等 (123)

查看全文
Mysql, 原创, 安卓

Android SQLite AUTO_INCREMENT 报错

在开发 Android应用程序使用数据库的时候,发现SQLite 创建表的时候使用AUTO_INCREMENT报错。找了一些资料发现SQLite使用sql语句还是跟Mysql的稍微有点区别的,下面是个在Mysql中使用语句常见表: CREATE TABLE `adinfo` ( `id` tinyint(4) NOT NULL AUTO_INCREMENT, `usetime` int(10) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 在使用SQLite创建的时候竟然有很多处错误。 1. AUTO_INCREMENT 修改方法: 将`id` tinyint(4) NOT NULL AUTO_INCREMENT,改为`id` INTEGER PRIMARY KEY AUTOINCREMENT, 同时需要去掉PRIMARY KEY (`id`) 2.ENGINE,DEFAULT CHARSET 修改方式:去掉ENGINE=InnoDB DEFAULT CHARSET=utf8,原因Mysql的数据引擎有很多,而SQLite不分这个, 还有默认字符串编码SQLite里面我暂时没有发现,不知道他有没有设置编码的地方。 (1308)

查看全文
Mysql, 原创,

多次安装wamp后Mysql无法启动解决方案Not first time to install wamp, Mysql cannot be started

如果不是首次安装wamp或着mysql,可能会遇到安装后无法启动的问题。我是由于升级wamp,升级后无法启动mysql服务。 下面是我的解决方法: 1.准备升级网站的时候首先备份mysql,如果因为安装mysql的路径不同,可能会导致mysql的数据无法使用,这个一定要先做。 2.卸载旧版的wamp或者mysql。(尝试安装新版wamp看是否成功,一般是mysql无法启动了)。 4.下面的方法是关键:删除mysql注册表 msyql安装到最后一步start service错误解决方法 1,到控制面板里面先把MySQL删除. 2.到c盘C:\Program Files目录下把MySQL目录删除. 3.如果在其他盘还有设置目录也要删除.空目录也要删除 4.到regedit把注册表 1. HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/Eventlog/Applications/MySQL 2. HKEY_LOCAL_MACHINE/SYSTEM/ControlSet002/Services/Eventlog/Applications/MySQL 3. HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Eventlog/Applications/MySQL 有的话,全部删除! (技巧:用F3循环查找“MySQL”) 5.如果任务管理器里有关MySQL内容也删除 通过上面的步骤一般都可以正常安装和启动mysql了。希望能对你有所帮助。If you are not the first time to install wamp or mysql,you may come across this problem,mysql unable to start up. I wanted to update wamp to the latest, and found that mysql server cannot be stated. This is my resolvent: 1.If you want to update your wamp or mysql ,you need first to backup mysql data first,or you may find some of data in database cannot be use. 2.uninstall older wamp or mysql.(you can try to install wamp to see it wether success or not.) 3.this below is the most impotent:delete mysql register mysql server cannot be start 1)  to Control Panel to delete Mysql 2) delete Mysql File in c:\Program Files 3) If there are  Mysql Files On Other disk,alse delete 4). Start->cmd->regedit  delete these (1). HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/Eventlog/Applications/MySQL (2). HKEY_LOCAL_MACHINE/SYSTEM/ControlSet002/Services/Eventlog/Applications/MySQL (3). HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Eventlog/Applications/MySQL you can use F3 to find MySQL 5.If there is mysql in Task Manager,alse delete. Use this,you can install now,hope it can help you. (1103)

查看全文