起因
今天在写一些小项目的时候,在创建表的时候用到了两个字段,createTime
和updateTime
,用于表示条目的创建和更新时间。为了偷懒,决定使用MySQL的CURRENT_TIMESTAMP
这个特性,如:
可以在我们创建或者更新此条数据的时候,自动将时间戳记录,但是当我们选择之后,会有如下提示
错误提示
上网查看了一下类似的错误,基本是由于使用的MySQL版本过旧的原因,于是使用
select version()
查看了一下版本,显示为5.5.58-0ubuntu0.14.04.1-log
,最近的版本已经到了5.7,所以,是有必要升级一下了。
准备
升级之前,最好将数据库的数据备份一下,以备不时之需
mysqldump -uroot -p'jianshu.com' --all-databases > all_databases.sql
操作步骤
由于我们使用的是Ubuntu,自然要依赖apt-get
命令来完成升级
- 下载源配置
wget https://dev.mysql.com/get/mysql-apt-config_0.8.1-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.1-1_all.deb
会有提示框弹出来供选择,类似
MySQL安装
由于需要和现网环境适配,我们选择使用MySQL Server的5.6的版本即可
- 更新
sudo apt-get update
- 安装
sudo apt-get install mysql-server
- 检查
最后我们需要检查一下数据是否ok,一般是使用mysql_upgrade
命令来完成,但是万恶的是,这是一个很久未使用的数据库,忘了root密码了,还需要重置一下密码。
首先使用无需密码登录
找到配置文件,一般是在/etc/mysql下面
配置文件
可见,升级之后,备份了之前的配置,并且生成了一个新的配置文件my.cnf
my.cnf
其内容就是将conf.d
和mysql.conf.d
文件夹里面后缀为cnf的文件内容全部引入。经过查看,我们定位到了平常使用的配置文件,其在mysql.conf.d
中,名字为mysqld.cnf
可见,新的配置文件里面只有简单mysqld的一些配置,注意上面socket
配置,其值和一般使用的不一样,后面我们在本机使用mysql客户端的时候可能会有一些socket不存在的提示,在此,我们可以提前创建一个软链接
ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock
言归正传,我们需要在mysqld的配置下面,增加一行skip-grant-tables
,用于无密码登录,保存退出后重启mysql服务,即可以直接通过mysql
命令直接登入。
登入之后,可以直接通过修改库中的密码来实现重置
mysql> use mysql
Database changed
mysql> update user set Password= password("123456") where user = "root";
Query OK, 7 rows affected (0.00 sec)
Rows matched: 7 Changed: 7 Warnings: 0
如上,将所有root密码均修改为123456。
回到我们的主题,由于新版本里面的一些表结构可能和老版本不一致,所以我们通过mysql_upgrade
命令来升级,这一步非常重要
sudo mysql_upgrade -u root -p'www.jianshu.com'
至此,所有升级操作均已完成
网友评论