上周在测试机上编译安装了一个MySQL做升级测试,本来测试机上就有个cluster集群的单实例,为了不冲突,所以选择了编译安装。
编译安装的好处就是能自己控制软件安装的目录,指定默认配置文件地址等,便于磁盘管理,卸载也很方便,文件夹一删就完事。
MySQL编译安装需要在官网上下载source源码包,5.7的源码包大约几十兆大小,不过在编译过程中产生的缓存文件有好几个G,这里一定要留足空间,否则会产生各种后续问题。
MySQL源码包的编译用的是cmake命令进行编译,官网上有source安装方法说明,cmake只需要接上boost文件就可以了,不需要像网上很多编译安装的教程一样接上一堆文件夹参数,本人建议不要学习网上cmake接上一堆文件夹的编译命令,后续MySQL的文件夹全部都可以在cnf配置文件进行制定,不需要在编译的时候制定,编译的时候制定后续灵活性变更会变差的。
cmake必须要制定boost文件,官网上也说明了这点,官方源码包一般是没有带boost源码的,如果本机没有安装boost,解决办法很简单,只需要下载boost源码,make编译一下就行了,编译完boost源码之。cmake编译MySQL,编译命令:
cmake -DCMAKE_INSTALL_PREFIX=MySQL安装路径,自定义 -DWITH_BOOST=boost路径,制定安装的boost所在位置 -DDOWNLOAD_BOOST=1 #mysql8版本的自动下载参数和网络上其他的不一样,如果命令不对,请先用help查看正确命令
最后一个参数是代表boost如果检测到未安装,让系统自行安装,虽然有这个命令,建议手动安装boost,否则未知异常不可控制
有着三个命令就够了,这里的cmake编译很快,确保cmake结束的时候没有任何报错,有任何报错解决掉再重新cmake,重新cmake的时候需要删除掉CMakecache.txt缓存文件,再执行命令。
完成cmake后执行make命令
这里make的时候会花费很长的时间,耐心等待,如果make完成有任何报错,请解决后重新进行Cmake编译处理,记得删除缓存后cmake。
make完成后进行make install,安装很快
完成后进入到MySQL安装文件夹,MySQL第一次启动的时候需要初始化,这里我们在初始化之前就需要写好cnf配置文件,并在配置文件中制定相关目录地址,所以不需要在cmake哪里制定,以后想换地址只需要在配置文件中换就行了。
[root@localhost mysql]# cat mysql5.7-3306.cnf
[mysqld]
server-id=1
port=3306
basedir=/app/mysql5.7-3306
datadir=/data/mysql5.7-3306/data
socket=/data/mysql5.7-3306/mysql.sock
symbolic-links=0
#general
max_connections=2000
max_allowed_packet=64M
#mysql8版本你没有以下两个参数,需要去掉,否则初始化会出错
query_cache_size=0
query_cache_type=OFF
sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
event_scheduler=ON
lower_case_table_names=1
#logfile
log-error=/data/mysql5.7-3306/log/mysqld.log
pid-file=/data/mysql5.7-3306/mysqld.pid
log-bin=/data/mysql5.7-3306/binlog/mysql-bin
expire_logs_days=3
binlog_format=ROW
log_slave_updates=ON
slow_query_log=1
slow_query_log_file=/data/mysql5.7-3306/log/slow_query.log
long_query_time=2
#innodb
innodb_buffer_pool_size=4G
innodb_log_file_size=1024M
innodb_log_files_in_group=2
innodb_flush_method=O_DIRECT
innodb_buffer_pool_instances=4
#Replication
gtid_mode=on
enforce_gtid_consistency=on
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON
以上是我的配置文件
编辑好之后,进入MySQL安装文件夹进行initialize 初始化MySQL
进入bin目录执行:
./mysqld --defaults-file=指向配置文件 --initialize --user=mysql
执行完后根据配置文件配置的log地址找到初始化产生的log文件grep 找到root密码
之后启动的时候也要制定配置文件启动,如:
./mysql --defaults-file=配置文件 -uroot -p -h127.0.0.1 -P3306
踩过的坑,之上强调的基本上都是趟过的坑
MySQL编译的时候一定要留足空间,因为磁盘原因,导致我重复安装了三次
MySQL重新编译的时候一定要删除掉cmake之前的缓存文件
初始化initialize的时候,可以重复初始化,记得每次初始化需要删除制定的data文件夹 log data binlog下面的数据
制定文件夹的时候一定要授权给MySQL用户
由于是多实例,不能随便的按照常规方式启动,一定要制定defaults-file参数,常规启动会指向默认安装的MySQL路径,会各种报错。不管是初始化还是启动,都要加上defaults-file参数,而且必须要放在第一个参数位置。
多实例的情况会有端口冲突,所以启动的时候最好带上ip和端口,避免和本机默认的MySQL冲突
编译安装最大的优势,可以随便安装几个MySQL,对于测试机这种来说,可以给自己安装几个来慢慢玩,挺好的
举例一个我的指定数据库导出脚本:
mysqldump -uroot -p -d --set-gtid-purged=OFF \
--events \
--routines \
--single-transaction \
--database \
apolloportaldbapp \
bone2.0 \
canal_test \
card_db \
finger_db \
jf_pnms_server_yjf_rdstest \
jf_pnms_server_yjf_test \
jf_pnms_test3 \
jfcms_temp \
jfdd_db_back \
mrbird \
new_bussiness_extend \
newsetmealtg_db \
otter \
persons \
reward \
ry \
short_url_db \
teledata \
telefen__user \
vhr \
wx_opendb > /home/data/215new.sql
这里几个参数建议带上,set-gtid-purged 会影响后续导入GTID导入报错,single-transaction 会影响导出访问报错不能访问,-d
不导出数据导出结构,千万别和-t搞混了,-t导出的数据没有create table语句,导入会报错不能访问表,events导出事物,routines导出存过,这几个参数不带可能会造成一些数据库报错,建议携带。