Mysql 遇到过的问题

  • 2019-08-06   centos 6 , 32bit

当尝试打开wordpress网站时 ,出

如果直接在putty  mysql -u root -p 连, 出

 

这时查看 mysql status :

状态是 : mysqld dead but subsys locked

Google到解决方法是 :   https://support.plesk.com/hc/en-us/articles/360005078273-Unable-to-start-MySQL-because-of-lack-of-RAM-mysqld-dead-but-subsys-locked-

a) 先把锁文件删除

b) free – m ,   看内存可用, 如果大于200M , 就不用做其他操作, 否则杀占内存过多的进程

c) 重新启动 mysql   :  service mysqld start


 

use mysql in centos machine by c++ , 实现定时建表,取数等功能

  • 确定centos 版本 ,用命令

结果是

也就是说  , 是 centos6


  •  看是32位还是 64位

结果为

所以是 32位的


  •  看 mysql 版本

显示

所以, 是 mysql  5.1.73


  • 先写一个最简单的显示mysql版本的程序

 

  • 如何编译

mysql 安装后, 会自带1个命令 ,有2个参数  一个是 :

它的输出结果是:

第二个是

输出:

 

所以, 刚才的程序就可以这样编译 :

 

来源: https://www.codingfriends.com/index.php/2010/02/17/mysql-connection-example/comment-page-1/

  • 然后再做一个显示数据库所有表的程序 , 来源同上

编译方法与之前的一样 , 如果把 这句

换为 :

即可实现建表

  • 以上只是 Mysql相关 ,如果与 ctp 合并, 参见:

http://www.notesoflyang.com/?p=2152

编译方法将改为

以下的程序实现了当把日期作为参数传进去之后 (20190805)

能自动建表并插数

  • centos 7 用 sleep 函数 加  #include <unistd.h>

此程序的问题是 cpu 占用过高 ,在centos 执行 :

发现占用率是 百分100 ,

因为原来的写法是 :

while(1) {}

改为  sleep(大整数)即可

看进程的方法来自 :

https://www.cyberciti.biz/faq/how-to-check-running-process-in-linux-using-command-line/


 

此外, 还存在的问题是内存泄漏, 随着程序的运行, 内存会很快耗尽 (经过观察, 不存在这个问题, 是程序一开始执行内存占用急增 , 过一阵就会恢复正常 )

检查内存泄漏的工具是   valgrind

安装方法 :

参拷:  https://stackoverflow.com/questions/22495744/how-to-install-valgrind-3-9-0-in-centos-5-5

安装后 :

执行


发现程序执行一段时间后会自己结束

是因为sleep过短的原因, 改为 sleep(26000) ,  约7个小时即可

 

 

  • 如何定时执行此程序并定时关闭

a) 因为程序运行在 美国虚拟机, 首先要知道当前的中国时间

来源 :  http://www.cplusplus.com/reference/ctime/gmtime/

编译方法 :

b) 要有一个 能实现cron trigger 的库 , 要能在 centos 运行的 非.net版本

一开始想用这个 :  https://stackoverflow.com/questions/3618499/c-c-api-to-decode-cron-style-timings

是c++程序可以调用的lib , 但是下载已不可用, 是 2013年的


或者可以用centos系统自带的crontab  , 定时执行  c++ 程序

https://blog.csdn.net/capecape/article/details/78515558

思路是 : 先写一个脚本判断时间,该执行还是该关闭程序

然后用 crontab 每小时执行脚本

 

如何在 bash 脚本判断时间 : https://unix.stackexchange.com/questions/395933/how-to-check-if-the-current-time-is-between-2300-and-0630

 

自动启动的脚本是这样的:

 

需要注意的是这句 :  dateStr=$(date -d ” + 24 hour” ‘+%Y%m%d’);

等号2测不能有空格 , 来源 :

https://stackoverflow.com/questions/9556517/variable-assignment-inside-a-case-statement-bash

此外, 用 nohup 来后台执行

让脚本可执行的方法是 :


如何自动停止

 

所以, 最终的脚本是这样的 :

 

 

 

 

  • centos crontab

如何查看现有定时任务, 新建任务, 见 :

https://tecadmin.net/crontab-in-linux-with-20-examples-of-cron-schedule/

我加了一个这样的任务:

每分钟执行此脚本, 但是 , 执行没有, 或者执行的结果在哪里看?

答案是 ;  https://stackoverflow.com/questions/28856326/crontab-simple-echo-not-running

如果要每小时, 就

  • 调试用到的命令行

 

  • 待解决的问题 :

a) 找一个读 config 文件的库

b) 自动建表时避开周末 及休市日, 这个要用到config

 

  • 参考文档

https://sandeepghai.wordpress.com/2011/08/07/linking-of-mysql-database-with-c-on-linux-machine/

Linking of MYSQL Database with C++ on Linux Machine


https://stackoverflow.com/questions/8896963/connecting-to-mysql-through-c

关于 how to link


http://zetcode.com/db/mysqlc/

代码编译不通过 , 原因未知

 

MYSQL store routine examples

  • 传3个参数进去, 表名 + 2个时间

 

调用方法 :

 

  • 在 while 循环把 start time 每次加5分钟

 

  • 测试用sql 语句

 

How to backup and restore wordpress site

  • 目标: 备份远程 bandwagong的 wordpress到本地 centos 机器, 包括articl , Pic , theme …

 

  • First backup  远程 mysql database

 

然后 ,restore 到 本地

 

  • Tools —-> export —-> all contents

and download the generated file

 

  • 在本地 centos 7 ,  先翻墙 , 再下载 wordpress最新版本, 翻墙是为了能下载

 

  • 解压到 /var/www/html/

 

  • 在 mysql 建表

Piercing77#

 

注: 如果不是第一次见表, 可直接执行:

 

  • 修改

在文件最后加上

 

重启 apache

  • 修改 /etc/hosts

加上

 

  • 这时, 在本机应该就能访问了, 如果想让同一局域网的其他PC能通过

http://192.168.3.116 的形式访问

需要

 

learn from  https://www.centos.org/forums/viewtopic.php?t=59161

  • 但是, 这样图片,视频等仍然存储在远程

是因为在 wp_posts表中, URL 仍然是远程的 ,需要手动改过来

参见: https://wpbeaches.com/updating-wordpress-mysql-database-after-moving-to-a-new-url/

 

主要是把 http://www.notesoflyang.com 改为  http://192.168.3.116 (公司局域网 IP  )

 

一共4句 sql

 

此外, 因为远程wordpress最开始是没有域名的, 所以有一部分upload image 是以远程IP而不是域名做地址的,所有, 还需要再执行一遍这4句,但是把 域名改ip

 

 

 

  • 最后, 把 /var/www/html/wordpress/wp-content/uploads 文件夹的内容从远程copy到本地即可
  • finish  backup

 

  • reference article :

how to backup wordpress without any plugin :

https://skillcrush.com/2015/04/23/backing-up-wordpress/


 

  • 如果

失败 ,解决方法是

sudo systemctl start mysqld 这种是用 systemctl 管理程序启动,
很多教程这样写: /etc/init.d/mysqld start
但是 在我的 /etc/init.d 并没有发现mysql

那就找 find / -name mysqld
发现在 /usr/sbin/mysqld
执行 /usr/sbin/mysqld start

  • 如果登陆mysql 时出现  :

注意最后的数字13

解决方法是 :

可能是因为原来的mysql:mysql 没有这个目录的权限

方法来自 :

https://serverfault.com/questions/497194/mysql-bind-on-unix-socket-permission-denied

how to use gdb on centos machine

  • 以这个程序为例

 

  • 编译 ,注意要带  -g  , 因为是c++ ,所以用 g++, c程序用 gcc

 

  • 启动gdb

 

  • 流程控制

break line number :  在某行下断点   ,centos 显示行号   ctrl + c

run    执行

next 执行一步

c : 执行到完

break

  • gdb 带参数执行 :

来源 : https://stackoverflow.com/questions/6121094/how-do-i-run-a-program-with-commandline-arguments-using-gdb-within-a-bash-script

 

  • 参考文章

http://www.math.bas.bg/~nkirov/2005/netb151/debugging-with-gdb.html

http://kirste.userpage.fu-berlin.de/chemnet/use/info/gdb/gdb_6.html

MYSQL commands

  • create DB

 

  • use DB

 

  • create table

create table with primary key

create table 最好这样写, 能避免表已经存在,再建出错

 

  • 一次创建多个表

2、执行sql脚本文件
方法一 使用cmd命令执行(windows下,unix或linux在的其控制台下)
【Mysql的bin目录】\mysql –u用户名 –p密码 –D数据库<【sql脚本文件路径全名】,示例:
D:\mysql\bin\mysql –uroot –p123456 -Dtest<d:\test\ss.sql
注意:
A、如果在sql脚本文件中使用了use 数据库,则-D数据库选项可以忽略
B、如果【Mysql的bin目录】中包含空格,则需要使用“”包含,如:“C:\Program Files\mysql\bin\mysql” –u用户名 –p密码 –D数据库<【sql脚本文件路径全名】

方法二 进入mysql的控制台后,使用source命令执行
Mysql>source 【sql脚本文件的路径全名】 或 Mysql>\. 【sql脚本文件的路径全名】,示例:
source d:\test\ss.sql 或者 \. d:\test\ss.sql

 

create JiDie Table

create JiDie report table

 

 

  • 找出含有最大值的row

 

  • check table column type

  • select limit count

  • delete all rows of table

 

  • c++ use mysql odbc to oper mysql DB

https://bobobobo.wordpress.com/2009/07/11/working-with-odbc-from-c/

 

  • alter table column type :

  • delete row

  • 常用的

  • delete table

  • 某一列减去三小时

  • case when else end 的用法

  • show version

  • if forget root password (centos )

 

  • show all users

 

  • migrate mysql DB from one machine to another machine   备份去远程 banwagon  , mysql pwd = Piercing77#

first backup current

 

如果是只导出单个表:

 

then copy sql file to remote machine , in my case is  : /home/mysqlDB/shfutureBK.sql

 

create DB in remote machine

 

restore DB

  • c++如何连 mysql   (centos 6)

先安装 开发工具

 

安装后, 头文件位于 /usr/include/mysql/mysql.h , 此全路径并不在default path , 但是 /usr/include 在 ,

所以 , 在 c文件里这么写 :

 

编译  gcc -o showVersion source.c $(mysql_config –libs)

来自 https://stackoverflow.com/questions/3396181/gcc-wont-compile-and-run-mysql-c-libraries

 

  • linux connect and query

 

  • linux insert

 

 

  • 从一个表select 出 multi rows , insert 到另外一个表

 

  • date add

  • 时间在某个区间

  • 插入每日总结表

 

  • 在已经存在的表上, 加 自增id

  • 从一个表往另一个表插数

 

  • 存储过程

UntilNowSummary  —  显示至今为止的报告

 

  • 存储过程规则 mysql 5.1 :

表名和数据库名不能用变量代替, 在存储过程里

  • 手册

https://docs.oracle.com/cd/E19078-01/mysql/mysql-refman-5.1/

 

  • django 专用数据库

DjangoDB

从一个数据库往另一个数据库的表复制 , 目的表有主键, 来源表没有主键

  • 下载 mysql 5.7 版本

https://www.cnblogs.com/tyhj-zxp/p/6693046.html

oracle 登陆:  gmail  ,  Curmudgeon77

 

  • 如何允许远程登陆

在 /etc/my.cnf  加

  • 远程登陆显示 :

解决方法 : 在 mysql 数据库 的  user 表加一个新用户 , XXX mean password