查看“CentOS7上源码编译安装MySQL5.7”的源代码
←
CentOS7上源码编译安装MySQL5.7
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
=注意= 注意 cmake 选项应该再优化一下、 https://blog.csdn.net/kangshuo2471781030/article/details/79294503 有空要多看一下my.cnf 的各个参数 [https://blog.csdn.net/daicooper/article/details/88637071 MySql5.7 配置文件 my.cnf 设置] =pre= <pre> 注意 cmake 选项应该再优化一下、 https://blog.csdn.net/kangshuo2471781030/article/details/79294503 MySQL currently requires boost_1_59_0 把原码包mysql-5.7.18.tar.gz上传到SOURCES目录下,并在SPECS目录下添加配置好的mysql.spec文件: 由于在Mysql5.6后都要依赖boost_1_59_0.tar.gz包,所以这里我直接解压到BUILD目录下,不然检测不到; tar xf boost_1_59_0.tar.gz -C rpmbuild/BUILD/ -DWITH_MYISAM_STORAGE_ENGINE=ON -DENABLED_LOCAL_INFILE:BOOL=ON -DWITH_PARTITION_STORAGE_ENGINE:BOOL=ON -DEXTRA_CHARSETS=all 我没有 rpmdevtools pcre-devel gcc make ncurses-devel </pre> =mysql5.7 源码编译安装 = ==安装依赖包== yum -y install gcc gcc-c++ ncurses ncurses-devel cmake bison bison-devel rpmdevtools pcre-devel make ==下载相应源码包== <pre>wget http://downloads.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.18.tar.gz</pre> ==创建mysql用户、用户组及目录== <pre> if ! id mysql > /dev/null 2>&1;then useradd -M -s /sbin/nologin mysql mkdir -p /data/apps/mysql/data/ mkdir -p /data/apps/mysql/binlog/ #mkdir -p /data/apps/mysql/logs/ mkdir -p /data/logs/mysql touch /data/logs/mysql/mysqld-error.log chown -R mysql:mysql /data/logs/mysql chown -R mysql:mysql /data/apps/mysql</pre> ==预编译及安装== <pre> tar zxvf boost_1_59_0.tar.gz -C /root/mysql #将文件解压至/root/mysql目录下 tar zxvf mysql-5.7.23.tar.gz && cd mysql-5.7.23 file ../boost_1_59_0 cmake . \ -DSYSCONFDIR:PATH=/data/apps/mysql \ -DCMAKE_INSTALL_PREFIX:PATH=/data/apps/mysql \ -DCMAKE_BUILD_TYPE:STRING=Release \ -DENABLE_PROFILING:BOOL=ON \ -DWITH_DEBUG:BOOL=OFF \ -DWITH_VALGRIND:BOOL=OFF \ -DENABLE_DEBUG_SYNC:BOOL=OFF \ -DWITH_EXTRA_CHARSETS:STRING=all \ -DWITH_SSL:STRING=bundled \ -DWITH_UNIT_TESTS:BOOL=OFF \ -DWITH_ZLIB:STRING=bundled \ -DWITH_PARTITION_STORAGE_ENGINE:BOOL=ON \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE:BOOL=ON \ -DWITH_BLACKHOLE_STORAGE_ENGINE:BOOL=ON \ -DWITH_PERFSCHEMA_STORAGE_ENGINE:BOOL=ON \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DENABLED_LOCAL_INFILE:BOOL=ON \ -DINSTALL_LAYOUT:STRING=STANDALONE \ -DCOMMUNITY_BUILD:BOOL=ON \ -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \ -DWITHOUT_NDBCLUSTER_STORAGE_ENGINE=1 \ -DENABLED_PROFILING=1 \ -DINNODB_PAGE_ATOMIC_REF_COUNT=1 \ -DMYSQL_DATADIR=/data/apps/mysql/data \ -DWITH_BOOST=../boost_1_59_0 \ -DSYSCONFDIR=/etc \ -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \ -DWITH_MEMORY_STORAGE_ENGINE=1 \ -DWITH_MYISAM_STORAGE_ENGINE=ON \ -DWITH_READLINE=1 \ -DWITH_SYSTEMD=1 \ -DMYSQL_TCP_PORT=3306; warring CMake Warning: Manually-specified variables were not used by the project: COMMUNITY_BUILD ENABLE_DEBUG_SYNC ENABLE_PROFILING INNODB_PAGE_ATOMIC_REF_COUNT WITH_MEMORY_STORAGE_ENGINE WITH_READLINE #编译安装 make -j `grep processor /proc/cpuinfo | wc -l` && make install #安装完成后清理一下零时文件 make clean</pre> ==设置权限并初始化 MySQL 系统授权表== <pre> cd /data/apps/mysql/ useradd -M -s /sbin/nologin %{MYSQL_USER} mkdir -p /data/apps/mysql/data/ mkdir -p /data/apps/mysql/binlog/ #mkdir -p /data/apps/mysql/logs/ mkdir -p /data/logs/mysql touch /data/logs/mysql/mysqld-error.log chown -R mysql:mysql /data/logs/mysql chown -R mysql:mysql /data/apps/mysql cd /data/apps/mysql/ chown -R mysql:mysql . [root@szlinux02 mysql]# mkdir temp [root@szlinux02 mysql]# chmod 777 ./temp [root@szlinux02 mysql]# cd /data/mysql [root@szlinux02 mysql]# chown -R mysql:mysql . </pre> ==初始化系统数据库 == MySQL 5.7.6之前的版本执行这个脚本初始化系统数据库 ./bin/mysql_install_db --user=mysql --basedir=/data/apps/mysql --datadir=/data/mysql 5.7.6之后版本初始系统数据库脚本 /data/apps/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/data/apps/mysql/ --datadir=/data/apps/mysql/data/ 这个有问题呢 cd /data/apps/mysql/ ./bin/mysqld --initialize-insecure --user=mysql --basedir=/data/apps/mysql --datadir=/data/apps/mysql/data/ created with an empty password 注意: MySQL之前版本mysql_install_db是在mysql_basedir/script下,MySQL 5.7直接放在了mysql_basedir/bin目录下。 "--initialize"已废弃,生成一个随机密码(~/.mysql_secret) "--initialize-insecure"不会生成密码 "--datadir"目录下不能有数据文件 ==配置MySQL服务== <pre> #on centos6 cp /data/apps/mysql/support-files/mysql.server /etc/init.d/mysqld chkconfig --add mysqld chkconfig mysqld on #on centos7 cp scripts/systemd/mysqld.service.in /usr/lib/systemd/system systemctl status mysqld.service cat > /etc/my.cnf << EOF [client] port=3306 socket = /tmp/mysql.sock [mysqld] character-set-server=utf8 collation-server=utf8_general_ci skip-external-locking skip-name-resolve user=mysql port=3306 basedir=/data/apps/mysql datadir=/data/apps/mysql/data #tmpdir=/usr/local/mysql/temp # server_id = ..... socket=/tmp/mysql.sock log-error=/data/logs/mysql/mysqld-error.log pid-file=/data/apps/mysql/data/mysql.pid open_files_limit=10240 back_log=600 max_connections=500 max_connect_errors=6000 wait_timeout=605800 #open_tables=600 #table_cache = 650 #opened_tables = 630 max_allowed_packet=32M sort_buffer_size=4M join_buffer_size=4M thread_cache_size=300 query_cache_type=1 query_cache_size=256M query_cache_limit=2M query_cache_min_res_unit=16k tmp_table_size=256M max_heap_table_size=256M key_buffer_size=256M read_buffer_size=1M read_rnd_buffer_size=16M bulk_insert_buffer_size=64M lower_case_table_names=1 default-storage-engine=INNODB innodb_buffer_pool_size=2G innodb_log_buffer_size=32M innodb_log_file_size=128M innodb_flush_method=O_DIRECT ##################### thread_concurrency=32 long_query_time=2 slow-query-log=on slow_query_log_file = /data/logs/mysql/slow-mysql.log [mysqldump] quick max_allowed_packet=32M #[mysqld_safe] #log-error=/var/log/mysqld.log #pid-file=/var/run/mysqld/mysqld.pid EOF </pre> ==启动关闭 mysql 数据库== <pre> 关闭和启动的最直接就是他们了,启动脚本也是启用他们的 关闭mysql 数据库 mysqladmin --defaults-file=/etc/my.cnf -uroot -p'xx' shutdown 2>&1 killall -15 mysqld 启动 mysqld_safe my.cnf #启动脚本启动 其实就是启用上面的命令 面试遇到 service mysqld start </pre> ==配置MySQL环境变量 == echo -e '\n\nexport PATH=/usr/local/mysql/bin:$PATH\n' >> /etc/profile && source /etc/profile ==设置数据库root用户密码== ./bin/mysql_secure_installation ==创建其他MySQL数据库用户== <pre> [root@szlinux02 mysql]# mysql -uroot -p mysql> CREATE DATABASE `testdb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; mysql> grant all privileges on testdb.* to 'ryanxu'@'%' identified by 'ABCabc123!@#'; mysql> flush privileges; myqsl> exit</pre> 3.启动时没有使用配置文件 如果没有设置使用指定目录my.cnf文件及默认读取目录没有my.cnf文件,表示mysql启动时并没有加载配置文件,而是使用默认配置。 需要修改配置,可以在mysql默认读取的目录中,创建一个my.cnf文件(例如:/etc/my.cnf),把需要修改的配置内容写入,重启mysql后即可生效。 mysqld --verbose --help | grep -A 'Default options' =注意= <pre>my.cnf配置文件 官网说:从5.7.18开始不在二进制包中提供my-default.cnf文件,不再需要my.cnf。从源码编译安装的mysql,基本配置在预编译和systemd启动文件中已定义好,不用my.cnf配置。 编辑systemd启动文件 可以直接拿过来用 在rpmbuild要怎么处理好呢 mysql 5.7 默认将 mysqld.service (/usr/local/mysql/)文件安装到了 mysql 安装目录下的 usr/lib/systemd/system/,将 mysqld.service 复制到/usr/lib/systemd/system/目录下 [root@localhost]/usr/local/mysql#cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system cd ~/mysql-5.7.20 cp ./scripts/mysqld.service /usr/lib/systemd/system vi /usr/lib/systemd/system/mysqld.service 配置文件无需改动 启动mysql systemctl enable mysqld.service systemctl daemon-reload systemctl start mysqld.service systemctl status mysqld.service </pre> [https://blog.csdn.net/hobohero/article/details/78812362 CentOS7编译安装MySQL 5.7.20] https://dev.mysql.com/doc/refman/5.7/en/using-systemd.html =查看MySQL Innodb引擎当前参数= mysql>show variables like '%innodb%'; mysql>SHOW engine innodb STATUS\G; =other= mysql中utf8和utf8mb4区别 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。 二、内容描述 那上面说了既然utf8能够存下大部分中文汉字,那为什么还要使用utf8mb4呢? 原来mysql支持的 utf8 编码最大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了。三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多文种平面(BMP)。也就是说,任何不在基本多文本平面的 Unicode字符,都无法使用 Mysql 的 utf8 字符集存储。包括 Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和很多不常用的汉字,以及任何新增的 Unicode 字符等等。 [https://www.cnblogs.com/beyang/p/7580814.html mysql中utf8和utf8mb4区别] =trouble shooting= <pre> #如果改为自己的配置文件就有问题 [root@rpmbuild mysql]# cp /etc/my.cnf.rpmold /etc/my.cnf [root@rpmbuild mysql]# service mysqld restart Shutting down MySQL.. SUCCESS! Starting MySQL. ERROR! The server quit without updating PID file (/data/apps/mysql/data/rpmbuild.pid). 原来是初始系统数据库有问题,应该是格式问题 根本在 数据目录没生成 sys 相关目录,我手工 先mysqld --initialize-insecure 再mysqld --initialize-insecure --user=mysql --basedir=/data/apps/mysql/,最后如下 居然成功了 /data/apps/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/data/apps/mysql/ --datadir=/data/apps/mysql/data/ 加上-DWITH_SYSTEMD=1可以使用systemd控制mysql服务,默认是不开启systemd的 mysql 5.7 默认将 mysqld.service (/usr/local/mysql/)文件安装到了 mysql 安装目录下的 usr/lib/systemd/system/,将 mysqld.service 复制到/usr/lib/systemd/system/目录下 cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system #没开启systemd的原因 rpm -ivh ops_mysql-5.7.18-1.0.x86_64.rpm 准备中... ################################# [100%] 正在升级/安装... 1:ops_mysql-5.7.18-1.0 ################################# [100%] cp: 无法获取"/data/apps/mysql/usr/lib/systemd/system/mysqld.service" 的文件状态(stat): 没有那个文件或目录 Failed to execute operation: No such file or directory Failed to start mysqld.service: Unit not found. chmod: 无法访问"/etc/rc.d/init.d/mysqld": 没有那个文件或目录 /var/tmp/rpm-tmp.4yo85p:行25: /etc/init.d/mysqld: 没有那个文件或目录 mysqladmin: connect to server at 'localhost' failed error: 'Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)' Check that mysqld is running and that the socket: '/tmp/mysql.sock' exists! mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 2002 (HY000): Can't connect to local MySQL server through socket sysd 启动 mysql err log 如下 [ERROR] /usr/sbin/mysqld: Can't create/write to file '/var/run/mysqld/mysqld.pid' (Errcode: 13 - Permission denied) 把启动文件pid目录必一下就行了 sed -i 's!/var/run/mysqld/mysqld.pid!/data/apps/mysql/data/mysqld.pid!' mysqld.service </pre> [https://www.crifan.com/mysql_restart_fail_mysqld_unknown_variable_explicit_defaults_for_timestamp_true/ mysql重启出错:mysqld unknown variable explicit_defaults_for_timestamp=true] =see also= [[Mysql性能优化]] [https://blog.csdn.net/kangshuo2471781030/article/details/79294503 Centos7.2编译安装mysql5.7.18配置及详解] [https://www.linuxprobe.com/centos7-2-systemd-mysql5-7-11.html Centos7.2 Systemd 方式编译 Mysql5.7.11] [https://blog.csdn.net/qq_18838763/article/details/51297856 Centos7下源码安装Mysql5.7] [https://www.cnblogs.com/doseoer/p/8047141.html CentOS 7.4 使用源码包编译安装MySQL 5.7.20] [https://blog.csdn.net/fdipzone/article/details/52705507 mysql 查看当前使用的配置文件my.cnf的方法] [https://blog.csdn.net/toontong/article/details/50905657# CentOS-7 下 systemctl 管理 mysql-5.7的不同,配置jemalloc] [https://blog.csdn.net/moxiaomomo/article/details/9792801 查看MySQL配置文件路径及相关配置] http://blog.51cto.com/ultrasql/1924467 [https://dl.fedoraproject.org/pub/fedora/linux/updates/28/Everything/SRPMS/Packages/m/mariadb-10.2.18-1.fc28.src.rpm fedora 也是用的 mariadb 10.2 的版本] [https://www.cnblogs.com/ivictor/p/5146247.html CentOS 7下MySQL服务启动失败的解决思路] ==配置文件相关 == [https://yq.aliyun.com/articles/555115 mysql5.7新增参数配置解释] [https://www.cnblogs.com/paul8339/p/5935923.html mysql数据库参数innodb_buffer_pool_size和max_connections] [https://www.cnblogs.com/lxwphp/p/9592162.html MySql5.7 配置文件 my.cnf 设置] [https://www.cnblogs.com/Easonlou/p/6647575.html MySQL5.7优化配置参数] [https://blog.csdn.net/huangjin0507/article/details/50115433 mysql的auto-rehash简介] [https://blog.csdn.net/xiaoyi23000/article/details/52916070 MySQL数据库 prompt参数详解] [https://www.jianshu.com/p/dfa0380eb6b9 MySQL 5.7中explicit_defaults_for_timestamp参数] [https://www.jianshu.com/p/d7d364745173 MySql系统变量explicit_defaults_for_timestamp] [https://www.ropon.top/136.html mysql5.5、5.6打包rpm] [[category:ops]] [[category:mysql]]
返回至
CentOS7上源码编译安装MySQL5.7
。
导航菜单
个人工具
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
我的导航
关于我
shell
python
ops
linuxchina.net
blog.linuxchina
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息