“CentOS7 yum安装MySQL5.7”与“CentOS7上源码编译安装MySQL5.7”:页面之间的差异
无编辑摘要 |
小 导入1个版本 |
||
第1行: | 第1行: | ||
=注意= | |||
注意 cmake 选项应该再优化一下、 | |||
https://blog.csdn.net/kangshuo2471781030/article/details/79294503 | |||
有空要多看一下my.cnf 的各个参数 | |||
[https://blog.csdn.net/daicooper/article/details/88637071 MySql5.7 配置文件 my.cnf 设置] | |||
[[category:mysql]] | =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]] |
2019年10月14日 (一) 13:48的最新版本
注意
注意 cmake 选项应该再优化一下、 https://blog.csdn.net/kangshuo2471781030/article/details/79294503
有空要多看一下my.cnf 的各个参数 MySql5.7 配置文件 my.cnf 设置
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
mysql5.7 源码编译安装
安装依赖包
yum -y install gcc gcc-c++ ncurses ncurses-devel cmake bison bison-devel rpmdevtools pcre-devel make
下载相应源码包
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
创建mysql用户、用户组及目录
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
预编译及安装
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
设置权限并初始化 MySQL 系统授权表
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 .
初始化系统数据库
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服务
#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
启动关闭 mysql 数据库
关闭和启动的最直接就是他们了,启动脚本也是启用他们的 关闭mysql 数据库 mysqladmin --defaults-file=/etc/my.cnf -uroot -p'xx' shutdown 2>&1 killall -15 mysqld 启动 mysqld_safe my.cnf #启动脚本启动 其实就是启用上面的命令 面试遇到 service mysqld start
配置MySQL环境变量
echo -e '\n\nexport PATH=/usr/local/mysql/bin:$PATH\n' >> /etc/profile && source /etc/profile
设置数据库root用户密码
./bin/mysql_secure_installation
创建其他MySQL数据库用户
[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
3.启动时没有使用配置文件 如果没有设置使用指定目录my.cnf文件及默认读取目录没有my.cnf文件,表示mysql启动时并没有加载配置文件,而是使用默认配置。
需要修改配置,可以在mysql默认读取的目录中,创建一个my.cnf文件(例如:/etc/my.cnf),把需要修改的配置内容写入,重启mysql后即可生效。
mysqld --verbose --help | grep -A 'Default options'
注意
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
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 字符等等。
trouble shooting
#如果改为自己的配置文件就有问题 [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
mysql重启出错:mysqld unknown variable explicit_defaults_for_timestamp=true
see also
Centos7.2 Systemd 方式编译 Mysql5.7.11
CentOS 7.4 使用源码包编译安装MySQL 5.7.20
CentOS-7 下 systemctl 管理 mysql-5.7的不同,配置jemalloc
http://blog.51cto.com/ultrasql/1924467
配置文件相关
mysql数据库参数innodb_buffer_pool_size和max_connections
MySQL 5.7中explicit_defaults_for_timestamp参数