千家信息网

MYSQL5.7.22 源码安装 主从搭建

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,操作系统版本CENTOS7.6MYSQL5.7.22啥?为啥我的操作系统木有iso的安装镜像,哎算了,不能弄本地yum源,那就弄个网络的吧。只不过默认的用不了,那就自己动手丰衣足食cd /etc/yu
千家信息网最后更新 2026年11月02日MYSQL5.7.22 源码安装 主从搭建

操作系统版本

CENTOS7.6

MYSQL5.7.22

啥?为啥我的操作系统木有iso的安装镜像,哎算了,不能弄本地yum源,那就弄个网络的吧。只不过默认的用不了,那就自己动手丰衣足食

cd /etc/yum.repos.d/

mkdir bak

cp *.repo bak/

# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo

-bash: wget: 未找到命令

WTF?原来是

原本的CentOS-Base.repo已被删除,所以没办法安装wget命令,所以用curl -O来获取

#curl -O http://mirrors.163.com/.help/CentOS7-Base-163.repo

vi CentOS7-Base-163.repo

替换一些东西,不然可能无法使用

:%s#$releasever#7#g

yum list

OK!YUM源搞定了,下面开始搭建MYSQL

一、MYSQL源码安装
(两个节点都安装,步骤一样的)

安装环境:
操作系统CENTOS7.6

NODE1 主机名 tsdb1 IP地址 192.168.159.4

NODE2 主机名 tsdb2 IP地址 192.168.159.5


1、安装依赖
yum -y install make gcc-c++ cmake bison-devel ncurses-devel perl
2、创建用户和组
groupadd mysql
useradd mysql -g mysql -M -s /sbin/nologin
3、下载5.7.22源码包
https://downloads.mysql.com/archives/get/file/mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz

4、解压tar -zxvf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz

cd /opt/

tar -zxvf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz -C /home/

cd /home/

mv mysql-5.7.22-linux-glibc2.12-x86_64 mysql5.7.22

5、安装

mkdir -p /home/mysql5.7.22/data/

cd /home/

ln -s mysql5.7.22 mysql

cd mysql

chown -R mysql:mysql ./

./bin/mysqld --initialize --user=mysql --basedir=/home/mysql5.7.22/ --datadir=/home/mysql5.7.22/data/ --lc_messages_dir=/home/mysql5.7.22/share --lc_messages=en_US


.

./bin/mysqld --initialize --user=mysql --basedir=/home/mysql5.7.22/ --datadir=/home/mysql5.7.22/data/ --lc_messages_dir=/home/mysql5.7.22/share --lc_messages=en_US

2019-05-25T13:01:50.716538Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).

2019-05-25T13:01:51.897953Z 0 [Warning] InnoDB: New log files created, LSN=45790

2019-05-25T13:01:52.039050Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.

2019-05-25T13:01:52.116959Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 43c9f84c-7eed-11e9-a241-fefcfe4975bb.

2019-05-25T13:01:52.118956Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.

2019-05-25T13:01:52.119626Z 1 [Note] A temporary password is generated for root@localhost: kar)*.OtV4F)

安装速度贼快,刷~~~的一下就完事了。

kar)*.OtV4F)

这个是自动生成的临时密码

(如果看到有报这个错的直接安装就好)
bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

解决方法: yum install -y libaio //安装后再去初始化就OK了)

#将mysql/目录下除了data/目录的所有文件,改回root用户所有
chown -R root .
#mysql用户只需作为mysql-5.7.22/data/目录下所有文件的所有者
chown -R mysql data

5.复制启动文件

cd /home/mysql/

cp ./support-files/mysql.server /etc/init.d/mysqld

chmod 755 /etc/init.d/mysqld

cp ./bin/my_print_defaults /usr/bin/

6.修改启动脚本

vi /etc/init.d/mysqld
#修改项:
basedir= /home/mysql5.7.22/

datadir= /home/mysql5.7.22/data/
port=3306

#加入环境变量,编辑 /etc/profile,这样可以在任何地方用mysql命令了
vi /etc/profile
#添加mysql路径,加入下面内容,按ESC-->:wq保存
export PATH=$PATH:/home/mysql5.7.22/bin

source /etc/profile

7.修改mysql配置项

vi /etc/my.cnf

[mysqld]
basedir = /home/mysql5.7.22

datadir = /home/mysql5.7.22/data

8.启动mysql

service mysqld start

有遇到无法启动的情况,第一是将配置文件修改成上面简单的方式,第二是删除data目录下的文件,重新初始化。

mysql -uroot -pkar)*.OtV4F)

遇到无法启动报错的情况,例如:

2019-12-31T07:49:42.258557Z 0 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.

2019-12-31T07:49:42.259636Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.

2019-12-31T07:49:42.259803Z 0 [Warning] Failed to set up SSL because of the following SSL library error: SSL context is not usable without certificate and private key

2019-12-31T07:49:42.260385Z 0 [Note] Server hostname (bind-address): '*'; port: 3306

2019-12-31T07:49:42.260446Z 0 [Note] IPv6 is available.

2019-12-31T07:49:42.260462Z 0 [Note] - '::' resolves to '::';

2019-12-31T07:49:42.260487Z 0 [Note] Server socket created on IP: '::'.

2019-12-31T07:49:42.261927Z 0 [Note] InnoDB: Loading buffer pool(s) from /data/mysql/mysql/ib_buffer_pool

2019-12-31T07:49:42.262277Z 0 [Note] InnoDB: Buffer pool(s) load completed at 191231 15:49:42

2019-12-31T07:49:42.264556Z 0 [Warning] Failed to open optimizer cost constant tables

2019-12-31T07:49:42.264839Z 0 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist

2019-12-31T07:49:42.264937Z 0 [ERROR] Aborting

(遇到这个报错问题,有可能是因为安装目录设置不对导致的,我试过自己重新安装

一个测试库,然后没有按笔记上的目录设置,自己设置了新的不同的目录如下,

[mysqld]

basedir=/data/mysql/

datadir=/data/mysql/data/

[mysqld_safe]

log-error=/var/log/mysqld.log

然后重新安装的时候也重新设置下,如下:

./bin/mysqld --initialize --user=mysql --basedir=/data/mysql/ --datadir=/data/mysql/data/ --lc_messages_dir=/data/mysql-5.7.22-linux-glibc2.12-x86_64/share/ --lc_messages=en_US

然后安装目录的用户所属也要记得修改为mysql)

登陆后第一件事是先修改密码,否则敲啥命令都报错,老老实实改密码

进入mysql修改初始密码,修改远程连接的用户权限问题

alter user 'root'@'localhost' identified by 'TaB)*.Wtf4F)';
flush privileges; #刷新权限

mysql -uroot -pTaB)*.Wtf4F)

use mysql;

update user set host = '%' where user ='root';

flush privileges;

CENTOS7.6版本开机不会自启动,需修改权限
chmod +x /etc/rc.d/rc.local

主从搭建

主库配置

vi /etc/my.cnf

[mysqld]

basedir=/home/mysql5.7.22/

datadir=/home/mysql5.7.22/data/

max_connections=3000

default-storage-engine=INNODB

character-set-server=utf8

slow_query_log_file = /home/mysql5.7.22/log/mysql-slow.log

slow_query_log=1

long_query_time = 5

log-queries-not-using-indexes = 1

bind-address=0.0.0.0

socket=/tmp/mysql.sock

user=mysql

#master

server-id=1

log-bin=mysql-bin

log-bin-index=mysql-bin.index

log-slave-updates=1

binlog-do-db=Master-slave

binlog-ignore-db=mysql

binlog_format=mixed

expire_logs_days=7

重启

service mysqld restart

主库配置同步用户

grant replication slave on *.* to 'Master-slave'@'192.168.159.5' identified by 'TaB)*.Wtf4F)';

flush privileges;

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000002 | 601 | Master-slave | mysql | |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

从库配置

vi /etc/my.cnf

[mysqld]

basedir = /home/mysql5.7.22

datadir = /home/mysql5.7.22/data

max_connections=3000

default-storage-engine=INNODB

character-set-server=utf8

slow_query_log_file = /home/mysql5.7.22/log/mysql-slow.log

slow_query_log=1

long_query_time = 5

log-queries-not-using-indexes = 1

bind-address=0.0.0.0

socket=/tmp/mysql.sock

user=mysql

#slave

server-id=2

log-bin= mysql-bin

relay-log= mysql-relay-bin

read->

log-slave-updates=1

replicate-do-db=Master-slave

expire_logs_days=7

重启

service mysqld restart

在主库查询ID号和日志文件号

show master status;

再登陆从库

从库

mysql> CHANGE MASTER TO MASTER_HOST='192.168.159.4',MASTER_USER='Master-slave',MASTER_PASSWORD='TaB)*.Wtf4F)',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=601,MASTER_CONNECT_RETRY=10;

start slave;

查看

show slave status \G

这里有些地方还有疑惑,比如我在配置文件增加以下信息会无法启动数据库

[mysqld_safe]

log-error=/home/mysql5.7.22/log/tsdb1_error.log

pid-file=/home/mysql5.7.22/data/tsdb1.pid

启动会遇到报错

service mysqld start

Starting MySQL. ERROR! The server quit without updating PID file (/home/mysql5.7.22/data//tsdb1.pid).

一直查资料无法解决

以上都是我根据各种网上资料加上自己遇到的问题,总结修改后的,只作为写给自己的笔记,方便下次搭建的时候查看,只不过那个设置只给自己看的功能不见了。

注意一个问题,在生产环境,要注意时区问题

[mysqld]

default-time_zone = '+8:00'

使用北京时间的时区

error 1045密码错误

select * from mysql.user where user='root';

use mysql;

update user set authentication_string=password('123456') where user='root' and host='localhost';

update user set authentication_string=password('123456') where user='root' and host='%';

flush privileges;

error 1086密码过期

use mysql;

update user set password_expired="N" where user="root";

flush privileges;

主从切换

mysql主从关系中,如果master宕机了,则要提升slave为主,

等原来的主库恢复之后,则要把老的主库变为从库,

这样才能尽最大可能的保证应用层面的业务高可用性和数据的完整性。

## mysql主从切换为从主:

从库变主库

将要由现在的从库切换为主库:

show processlist;# 确保Slave has read all relay log;

STOP SLAVE IO_THREAD

show slave status \G;检查IO及SQL线程是否正常,如果为NO表明同步不一致

stop slave;

reset master;

reset slave all;(看版本号)

grant replication slave on *.* repl@'IP' identified by '密码';

show master status;#记住这里列出的log_file和log_pos信息

------------------------------------------------------------------------------

## 主库变从库

将要由现在的主库切换成从库

Reset master;(新的slave,老的master)

Reset slave;

change master to master_host="IP",

master_port=3306,

master_user="repl",

master_password="密码",

master_log_file="...",#上一步中列出的log_file

master_log_pos="...";#上一部中列出的log_pos

start slave;

show slave status\G;

目前只是基础搭建,还有很多优化的参数没有验证测试,后续再补上

补充一下:

MYSQL还有一个和性能有关的关键参数,生产环境遇到的一个性能问题

innodb_flush_log_at_trx_commit

该参数控制重做日志写入磁盘的过程。我们知道 InnoDB 使用"Write Ahead Log"策略来避免数据丢失问题,即依靠重做日志来保证数据能在丢失后进行恢复。因此,InnoDB 重做日志的持久化非常重要。

该参数的有效值有 0、1、2:

0:事务提交时,不将重做日志缓冲写入磁盘,而是依靠 InnoDB 的主线程每秒执行一次刷新到磁盘。因此如果 MySQL 发生宕机,那么就有可能丢失一部分事务。

1:事务提交时,会将重做日志缓冲写入磁盘,并且立即刷新(fsync())。注意,因为操作系统的"延迟写"特性,此时的刷入只是写到了操作系统的缓冲区中,因此执行同步操作才能保证一定持久化到了硬盘中。

2:事务提交时,会将重做日志缓冲写入磁盘,但是不会立即进行刷新操作,因此只是写到了操作系统的缓冲区。此时若操作系统发生宕机而没有即使的同步,也可能会丢失一部分数据。

可以看到,只有1才能真正地保证事务的持久性,但是由于刷新操作 fsync() 是阻塞的,直到完成后才返回,我们知道写磁盘的速度是很慢的,因此 MySQL 的性能会明显地下降。如果不在乎事务丢失,,0和2能获得更高的性能。

sync_binlog

该参数控制着二进制日志写入磁盘的过程。

该参数的有效值为0 、1、N:

0:默认值。事务提交后,将二进制日志从缓冲写入磁盘,但是不进行刷新操作(fsync()),此时只是写入了操作系统缓冲,若操作系统宕机则会丢失部分二进制日志。

1:事务提交后,将二进制文件写入磁盘并立即执行刷新操作,相当于是同步写入磁盘,不经过操作系统的缓存。

N:每写N次操作系统缓冲就执行一次刷新操作。

二进制日志文件涉及到数据的恢复,以及想在主从之间获得最大的一致性,那么应该将该参数设置为1,但同时也会造成一定的性能损耗。

通常,会将这两个参数都设置成1来保证数据的安全,但是如果在某些情况下性能更重要,那么可以考虑将其设为其他值来获得最大的性能。

设置为1,最安全,但是有较大的性能损失;

设置为0,效率最高,但是最不安全;

设置为2,只要操作系统不崩溃,数据不会丢失;

一般有主从架构可设置为(主主架构也可以,或者对数据安全要求不高),这样设置的好处是提高IO性能,面对大并发也有一定的性能提升

innodb_flush_log_at_trx_commit=2

sync_binlog=0

操作系统 系统 日志 性能 磁盘 数据 文件 事务 参数 密码 目录 缓冲 问题 主从 用户 配置 二进制 保证 同步 安全 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网巨头反垄断金融科技 金融科技 互联网金融 深圳互联网络科技有限公司 礼当家互联网科技 卓越科技(互联网 ) 宜安科技 互联网金融 互联网科技咨询 互联网科技公司招聘 现代科技和互联网有关系吗 南山科技园互联网公司有哪些 移动互联网科技公司 新兴科技互联网创新大赛颁奖典礼 深圳市罗太互联网科技有限公司 深圳互联网科技的发展 互联网科技年终奖 陕西九四连强互联网科技有限公司 青岛易易互联网科技 现代互联网科技公司 华人运通互联网科技公司 互联网的黑科技实验室 互联网科技公司经营范围 互联网科技小额贷款 人人互联网科技是培训 科技大学互联网专业好不好 开启互联网科技时代小说 温州喔噻互联网科技有限公司 中化能源互联网科技招聘 米聚互联网科技南京有限公司排面 工业互联网等科技实现智能化赋能 科技互联网的核心竞争力
0