my blog my blog

Tag: MySQL
Ubuntu18.04编译安装MySQL 5.7.26

下载带有boost版本的MySQL 5.7.26

wget https://downloads.mysql.com/archives/get/file/mysql-boost-5.7.26.tar.gz

安装依赖

apt install cmake
apt install libncurses5 libncurses5-dev 
apt install bision

解压

tar xzf mysql-boost-5.7.26.tar.gz 
cd mysql-5.7.26/

编译安装

说明一下,其实这个boost并不需要单独安装,只需要把包内的boost路径加载到configure就可以了。

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_general_ci -DWITH_EMBEDDED_SERVER=1 -DENABLED_LOCAL_INFILE=1 -DWITH_BOOST=./boost
make
make install

完成后的工作

 

useradd -M -s /sbin/nologin mysql
groupadd mysql
chown mysql:mysql /usr/local/mysql/var/
chgrp -R mysql /usr/local/mysql/
mkdir -p /usr/local/mysql/var
cp support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql 
cat > /etc/ld.so.conf.d/mysql.conf<<EOF
    /usr/local/mysql/lib
    /usr/local/lib
EOF
ldconfig
/usr/local/mysql/bin/mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var/ --user=mysql --explicit_defaults_for_timestamp=true
初始化数据库
vim /etc/my.cnf
配置数据库
service mysql start
/usr/local/mysql/bin/mysqladmin -u root password password
设置管理员密码

附上LNMP的my.cnf

[client]
#password	= your_password
port		= 3306
socket		= /tmp/mysql.sock

[mysqld]
port		= 3306
socket		= /tmp/mysql.sock
datadir = /usr/local/mysql/var
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
thread_cache_size = 8
query_cache_size = 8M
tmp_table_size = 16M

#skip-networking
max_connections = 500
max_connect_errors = 100
open_files_limit = 65535

log-bin=mysql-bin
binlog_format=mixed
server-id	= 1
expire_logs_days = 10

default_storage_engine = InnoDB
innodb_file_per_table = 1
innodb_data_home_dir = /usr/local/mysql/var
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /usr/local/mysql/var
innodb_buffer_pool_size = 16M
#innodb_additional_mem_pool_size = 2M
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout
VPS磁盘空间大小调整小记

MySQL的日志文件又一次把奶牛博客的磁盘撑爆了,今天一下班发现网站挂了,然后ping还可以通,就进ssh看看究竟,然后很无语,mysql无法关闭也无法启动,df -h看了一下,发现/目录已经爆满。之前已经遇到过一次这种情形了,所以直接去看MySQL的日志文件,果然,几个G在那里堆着,删删删,反正也懒得去分析日志找原因了。删了之后发现/目录还是占用了近80%的空间,呃,这就有点儿纠结了吧,然后仔细看了一下df -h,我去,VPS还自带分区的,两块盘,一块30G的盘竟然挂载到了/mnt目录下,好吧,还有这种玩儿法。然后就想把这个vdb的硬盘给挂载到/目录下,但是回头一想,LVM貌似也不合适,没法直接加的,因为/是vda1这个主分区在挂载,所以,好吧,直接把vdb分给/usr目录吧,反正一般的东西也就扔这里面的,比如那个可恶的MySQL日志文件。

cp -Rf -p /usr /mnt

其中的-p参数是为了保证文件的uid和gid都保持不变,当然,这里是使用root帐号来操作的。

然后

umount /dev/vdb
mount /dev/vdb /usr
df -h

查看下确实挂载没有问题了,然后程序也都正常运行,之后再修改fstab

vim /etc/fstab

将原先挂载在/mnt目录下的vdb修改为挂载在/usr目录下。

最后再说下MySQL的日志,配置文件在/etc/my.cnf下,可以进行自动过期处理等操作,也可以直接注释掉不记录日志。

hibernate真心挺折腾的

 

还是比较习惯mysql直接用sql语句来查询,HQL还需要习惯习惯再习惯哇。

这两天折腾Hibernate真的挺纠结的,可能我对于对象这东西的理解太水了,先ermaster做了数据库,然后用hibernate的逆向工程生成了hibernate的对象类,然后就sb了。

映射那里仔细看下,才知道,表b外键关联表a主键的时候,并木有在表b的对象类中直接生成表a主键,而是直接把表a的对象给引入进去了。呃,解释有点儿混乱。这样子,就说设计的两个表吧,主表是main,有主键id,生成的对象类是Main,然后副表是profile,有主键profileid和外键id,生成的副表对象类是Profile。

  1. Profile p = new Profile(); 
  2. Main m = new Main(); 
  3. p.setMain (m); 
  4. session.saveOrUpdate(p) 

这样子就把一个新的profile对象存上了,但是p并没有外键属性id,因此无法用HQL的from Profile  where id = x来查询,但是其实p是有p.main的,所以要查询的时候使用from Profile where main.id = x来获得已添加的p对象。挺绕的。可能map映射改下就不用那么麻烦了。可能数据库的结构还要变,把isxxx的判断都放到main表中,明天再思考这个问题。

还有那个from xxx.class 1这个东东,明天再查查。

 

设计数据库ER模型图利器ERMaster

 

ERMaster是eclipse的一个插件,用于设计ER模型图。提供的功能包括:从数据库导入关系生成ER图,导出设计图,导出DDL数据定义语句等。目前完整支持的数据库包括 MySQL、PostgreSQL 和Oracle (developing) DB2 (developing) HSQLDB (developing) SQLITE (developing) SQLServer (developing)。

安装方法很简单,只要在eclipse的插件里面添加地址就可以安装了

  1. http://ermaster.sourceforge.net/update-site/ 

使用也很方便,table直接拖出来,然后1toN NtoN之类的关系都可以直接搞定,并且可以导出ddl,在mysql下直接source下就生成数据表了,ermaster还可以生成测试数据,但是需要自己配置下,比如enum跟boolean的值会有问题。

总之还是很好用的,推荐下。

最近做的一些事儿

 

开学到现在是第四周了,不得不说,时间真得好快,我还没太缓过来。

最近奶牛挺充实的,经常去图书馆,从开学到现在已经啃了两本书了,都还不错的,跟大家分享下:一本是《JavaScript DOM编程艺术》,一本是《java web 开发与应用》,第一本比较出名,第二本是郭克华主编的,在豆瓣上竟然我是第一个评论的,好吧,但是那书还不错,可以让你对jsp有个基本了解,基本可以用。

因为毕业设计做一个在线管理系统,所以要学一些后台的东西,但是主要方向又是用户界面,好吧,啥都要学,最近打算看mysql的书,初步定《mysql cookbook》这本吧,图书馆没有,下了电子书,看标价120真的舍不得哇,现在的书好贵。

前端的bootstrap最近也在用,发现人家框架虽好,但是不可能完全用人家的框架哇,很多东西还是要自己做修改的,还有很多css要自己搞定,很多效果要自己写js实现,不过有个框架确实挺好的,因为很多东西自己设计出来毕竟感觉不如人家那个大方。

周五是开题,看样子好像只是走个过场,好吧,那就走个过场吧,不必太紧张,一周前开题报告就准备出来了,就呼呼啦啦说说就可以了应该,对于那个在线系统的技术实现,奶牛没有太大压力,虽然很多东西都要重新学,但是看到同组的一些人连开发环境还没配置起来呢,我也就放心了。(不许偷笑)

最近看电影少了,估计是春天还挺冷吧,最近手一直比较冷,大学就是一个摧残生命的地儿,好多生活习惯真的来到大学就又回去了。好吧,反正只有两三个月了,就这么过吧。

明天是个特别的日子:3月28日,不解释。

最近看开了很多东西,感觉自己还是踏踏实实的学技术吧,总是觉得自己的底子不够结实,有很多要学的。回想下大学,好像折腾了不少东西,能拿得出手的却寥寥无几。

现在生活挺充实,看书写代码,吃饭睡觉,cs go基本可以戒了,没有大屏幕,没有不掉线的网络,找什么枪感哇,毕业第一件事儿就是给自己弄个显示器。

好吧,就扯淡这些吧,最近用了下git hub,好吧,确实挺好用的,只是我真心写代码不多,不是毕设,估计奶牛用github都不会太多。有空把自己的github的东东整理下。

Godaddy的数据库备份导入到其他服务器出错的解决方法

 

奶牛有个站在Godaddy放着,前几天Godaddy的主机到期了,所以那个站就转出了,根目录下的内容没啥问题,直接上传就好了,但是数据库却让奶牛犯了难,在cpanel的PHPadmin中怎么导入都出错,这可怎么弄,莫非是数据库不兼容,不至于吧,数据的内容应该问题不大,感觉应该是文件的头部有些问题,索性就拿来自己的奶牛博客的MySQL数据库比较了下,这一比较还真发现了问题了。

用Notepad++打开了奶牛博客的数据量跟的另一个网站的数据库,从头开始一行行比较,其实那个MySQL数据库是明文存放的,打开后会发现文件的内容很清晰,当对比到数据库名称的那行就发现问题了,Godaddy生成的备份多了一行

CREATE DATABASE `XXX` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `XXX`;

感觉这一行也没啥问题啊,但是去掉后对整个数据库的结构也没啥影响,就直接去掉了,然后保存回到Cpanel下进行数据库导入,成功。

仔细想想,八成是因为数据库的版本不太一样,导致这行内容无法正常识别,这行是注释的文字符的类型跟整理类型,管它呢,删除后正常导入就ok啦~~~