thinkphp5与thinkphp3的不同点

1、默认的报错级别,全部为fatal级别,包括变量未定义之类的,可以在common.php里定义error_reporting,入口文件定义无效
2、伪静态路由,直接在route.php里配置一个数组就可以了,但是有个坑,类似这样的路由index.php/module/controller/action/param/value,转换成伪静态后,比如
‘news/:id’ => ‘index/news/article’,
接收参数id是没法通过get或者request之类来接收的需要在action里这样写
public function article(Request $req){
$id = $req->param(“id”);

3、模板,所有模板标签全部改成花括号,比如原先3.x这样写<volist …>,5.x必须这样{volist …}
4、模型,必须要给每个表定义model,然后才能使用model(“table”)来操作模型
5、取消单字母函数,因此不能用M()函数来操作模型,正确方法见上一条
6、join,链式sql的join方法,参数改了,第一参数是被连接表及别名,第二参数是连接条件,add方法取消了,改用insert方法
7、模板渲染,需要用return ,比如return $this->fetch(‘duan’);
8、控制器文件名和类名都不用再加controller

mysql5.6升级到5.7

mysql升级可以用mysql_upgrade更新系统库,5.7版本的系统库和5.6差别巨大,这种方式有诸多风险,没有尝试,这里采取另外一种方式。

5.7版本的安装目录和数据目录,都重新指定,和5.6区分开,5.7安装过程如下:

mkdir /data/mysql57
chmod +w /data/mysql57
chown -R mysql:mysql /data/mysql57

mysql.com下载带boost的源码包,解压

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql5710 -DMYSQL_DATADIR=/data/mysql57 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_UNIX_ADDR==/data/mysql57/mysql.sock -DMYSQL_USER=mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_BOOST=/usr/local/src/mysql-5.7.16/boost
make
make install

完成安装,接下来初始化5.7系统库,初始化前注意原my.cnf配置文件,很多配置项和5.7不兼容了,先另存,改成5.7默认配置文件

初始化系统库

/usr/local/mysql5710/bin/mysqld –initialize –user=mysql

记住初始化后的给的默认密码,后面首次登录会用到

启动mysql

/usr/local/mysql5710/bin/mysqld_safe &

客户端登录mysql

/usr/local/mysql5710/bin/mysql -h 127.0.0.1 -u root -p

输入密码

提示:You must reset your password using ALTER USER statement before executing this statement.

直接修改密码:

SET PASSWORD = PASSWORD(‘123456′);

进入mysql库,修改几个innodb表引擎,方便后面直接覆盖ibdata1文件

alter table engine_cost engine=’myisam’;
alter table gtid_executed engine=’myisam’;
alter table help_category engine=’myisam’;
alter table help_keyword engine=’myisam’;
alter table help_relation engine=’myisam’;
alter table help_topic engine=’myisam’;
alter table innodb_index_stats engine=’myisam’;
alter table innodb_table_stats engine=’myisam’;
alter table plugin engine=’myisam’;
alter table server_cost engine=’myisam’;
alter table servers engine=’myisam’;
alter table slave_master_info engine=’myisam’;
alter table slave_relay_log_info engine=’myisam’;
alter table slave_worker_info engine=’myisam’;
alter table time_zone engine=’myisam’;
alter table time_zone_leap_second engine=’myisam’;
alter table time_zone_name engine=’myisam’;
alter table time_zone_transition engine=’myisam’;
alter table time_zone_transition_type engine=’myisam’;

停掉mysql

将5.6数据目录的ibdata1和数据库目录转移到5.7数据目录下

注意转移过来文件的写权限

再次启动mysql

将系统表几个改成myisam引擎的表再改回innodb,至此完美升级完mysql,且最快恢复数据,直接拷贝数据文件,比mysqldump导sql再导入快多了

mysql通过mysqldump+binlog备份恢复&mysql5.7.10安装恢复

mysqldump备份脚本范例

#!/bin/sh
DATE1=`date +%Y%m%d%H%M`
DATABASE=glm_ec
BACKUP=/data/backup
/usr/local/mysql/bin/mysqldump -uroot -h 127.0.0.1 -R –single-transaction –master-data=2 库名 |gzip > $BACKUP/$DATABASE`date +%Y%m%d%H%M`.sql.gz

其中有两个参数: –single-transaction –master-data=2,

master-data,将会输出change master命令到导出文件里,值2以备注信息输出到文件里。single-transaction会发起一个读锁,保证当前备份时数据一致性,同时不影响备份时的更新操作,不影响系统的正常运行。库里有多个表,不设置这些参数,在导出时每个表导出的时间点不一样,在binlog里的位置也就不一致,这样在结合binlog文件恢复时,会有很多同步点,这是无法进行操作的。

有了这个唯一的恢复点,结合binlog通过mysqlbinlog命令很容易恢复数据,恢复过程略

分割线

—————————————————————————————–

通过ibdata1以及数据目录(idb以及frm)恢复

前面通过mysqldump+binlog恢复的方法是可行的,但是数据量大的时候,耗时非常长,实际环境数据目录+ibdata1文件超过200G,导sql文件就要十几个小时,速度太慢,因此有另外一种恢复方法,备份数据目录文件和ibdata1文件,通过一个目录和文件来恢复,这种方法优点是快,缺点是备份时需要停机。

恢复过程:

1、停掉要恢复机的mysql,备份ibdata1以及数据目录

2、将ibdata1以及数据目录移到要恢复机,修改移过来文件及目录权限

3、启动恢复机的mysql,如果有异常,还原步骤1备份的文件恢复

分割线

——————————————————————-

mysql5.7.10安装

mysql5.6和5.7的系统库(mysql库)差异非常大,上面第二种ibdata1+数据目录恢复的方案只能用在同版本数据库,本次遇到的情况是需要将mysql5.7备份的文件恢复到mysql5.6版本,经过实操证明这是不可行的,只有先升级mysql版本。

1、下载带有boost版本的community 版 mysql5.7(mysql.com 寻找要下版本的source code版,带boost的一般是最后一个,文件名里有boost),不带boost版本在安装时实际上还是要在线下载boost,会非常慢

2、CMAKE,要带上boost参数并制定路径,否则在后面make时会报错

3、make & make install

安装过程和其他版本差异不大,略

4、初始系统库,这步要人工操作,/usr/local/mysql/bin/mysqld –initialize –user=mysql

5、按照 恢复2操作,恢复并启动mysql

编译php5.6时报undefined reference to libiconv

config后编辑Makefile,在最后加上 -liconv,如下,再make make install

EXTRA_LIBS = -lcrypt -lz -lcrypt -lrt -lmysqlclient -lmcrypt -lldap -llber -lfreetype -lpng -lz -ljpeg -lcurl -lz -lrt -lm -ldl -lnsl -lrt -lxml2 -lz -lm -lssl -lcrypto -ldl -lz -lcurl -ldl -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err -lidn -lssl -lcrypto -lz -lxml2 -lz -lm -lssl -lcrypto -ldl -lz -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt -lxml2 -lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lxml2-lz -lm -lcrypt -liconv