CentOS 7安装mysql5.7-单节点&主从
一 下载
-
Mysql精细版本存档版本下载地址:https://downloads.mysql.com/archives/community/
-
选择对应的linux版本和x86/x64进行下载
可以选择 RPM Bundle,里面包含了所有的rpm安装包,如果选择了这个就不需要再分开下载下面的各个rpm包
如果不想全部下载,也可以细化下载,下载须要的mysql组件,有4个:分别是 server、client、common、libs(可选)
选择好后点击download进入到登陆页面,这一步如果没有账号可以选择不用登陆直接下载,点击下面的No thanks, just start my download.开始下载,可以将下载地址复制在下载器中下载,如迅雷,具体的下载地址为:
https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar
下载完成后的tar包解压后里面是每个组件的rpm包
-
可以在下载页面中(https://dev.mysql.com/downloads/mysql/5.7.html#downloads)选择其他版本下载
二 安装单机版MySql
-
卸载mariadb
centos默认安装了mariadb,因此,在安装mysql之前,需要卸载系统中安装的mariadb。
查看系统中所有已安装的mariadb包。命令:
rpm -qa | grep mariadb
卸载mariadb
rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64
-
安装MySql组件
使用命令rpm -ivh {-file-name}进行安装操作。(ivh中, i-install安装;v-verbose进度条;h-hash哈希校验)
按照依赖关系依次安装rpm包 依赖关系依次为common→libs→client→server,在下载的安装包中会有很多组件,mysql的正常运行只需要安装common、libs、client、server四个组件就可以,不需要全部安装
将所需组件的rpm包上传到服务器
执行安装命令
rpm -ivh mysql-community-common-5.7.27-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.27-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.27-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.27-1.el7.x86_64.rpm
在安装mysql-community-server-5.7.27-1.el7.x86_64.rpm如果出现下面错误:
原因:这是由于yum安装了旧版本的GPG keys造成的 解决办法:后面加上 --force --nodeps 如:
rpm -ivh mysql-community-server-5.7.27-1.el7.x86_64.rpm --force --nodeps
从 RPM 版本 4.1 开始,在安装或升级软件包时会检查软件包的签名。
注意细节
1、执行 yum remove mysql-libs 命令后,会自动删除掉 /etc/ 下的 my.cnf 文件
2、对于安装mysql组件,只有安装了 mysql-community-server-5.7.22-1.el7.x86_64.rpm 组件,才会:
a)在 /etc/下生成 my.cnf 文件 和 my.cnf.d 文件夹
b)在/var/lib/下生产以下三个文件夹:mysql、mysql-files、mysql-keyring
c) 在/var/log/ 下生成 mysqld.log 文件
d) 在/var/run/ 下生成 mysqld 目录
-
初始化mysql数据库
安装成功后执行 systemctl start mysqld 进行数据库初始化操作,若不进行初始化则不能生成root用户的初始密码
初始化启动使用命令:systemctl start mysqld (如果mysql无法启动可以尝试重启系统)
其他初始化命令:
启动:systemctl start mysqld
停止:systemctl stop mysqld
重启:systemctl restart mysqld
查看mysql状态:systemctl status mysqld
查看mysql进程:ps -ef|grep mysql
查看3306端口:netstat -anop|grep 3306
初始化启动完成后若要再管理mysql服务则需要用下命的命令
service mysql start
service mysql stop
service mysql restart
-
修改mysql配置文件
vi /etc/my.cnf
将文件原来的内容全部删除,重新添加如下内容
[mysqld]
character_set_server = utf8
bind-address = 0.0.0.0
skip-name-resolve
重启mysql:systemctl restart mysqld
如果上面的命令失败可以试试service mysql restart
-
初始化MySQL数据库
查看mysql初始密码,查看的密码要记录下来,在下一步修改mysql密码时要输入
cat /var/log/mysqld.log | grep "A temporary password"
修改MySQL密码
mysql_secure_installation
根据提示输入密码,新密码,选择等
在5.6后,mysql内置密码增强机制,低强度密码会报错,可以设置
修改密码需要提示信息依次为:
-
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) :
您想用提供的密码继续吗?(按y | y表示是,按任何其他键表示否):y
-
Remove anonymous users? (Press y|Y for Yes, any other key for No) :
删除匿名用户?(按y | y表示是,按任何其他键表示否):y(一般会选择删除匿名用户,安全)
-
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : n
不允许远程根用户登录?(按y | y表示是,按任何其他键表示否):n(输入y表示禁止root用户远程登陆,这样安全,但需要创建其他用户使用)
-
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
删除测试数据库并访问它?(按y | y表示是,按任何其他键表示否):y(是否都可以)
-
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
现在重新加载特权表?(按y | y表示是,按任何其他键表示否):y
修改成功后本地登陆管理员账户
mysql -u root -p
使用root账户创建一个新的账户
CREATE USER 'admin'@'%' IDENTIFIED BY 'Abc_123456';
GRANT all privileges ON *.* TO 'admin'@'%';
FLUSH PRIVILEGES;
创建完成之后可以使用admin用户操作,可以使用客户端登陆测试。
注:本安装步骤中限制了root用户的远程登陆,所以在使用客户端远程登陆时使用root用户登陆失败,要使用admin用户可以远程登陆,若需要root用户远程登陆,请参考下面
-
设置mysql开机自启
Systemctl enable mysqld
-
配置只要是root用户+密码,在任何主机上都能登录MySQL数据库。
(1)进入MySQL
[root@hadoop102 mysql-libs]# mysql -uroot -p000000
(2)显示数据库
mysql>show databases;
(3)使用MySQL数据库
mysql>use mysql;
(4)展示MySQL数据库中的所有表
mysql>show tables;
(5)展示user表的结构
mysql>desc user;
(6)查询user表
mysql>select User, Host from user;
(7)修改user表,把Host表内容修改为%
mysql>update user set host='%' where host='localhost';
(8)删除root用户的其他host
mysql>
delete from user where Host='hadoop102';
delete from user where Host='127.0.0.1';
delete from user where Host='::1';
(9)刷新
mysql>flush privileges;
(10)退出
mysql>quit;
至此,数据库的初始化工作完成,以上操作可以作为单机版的mysql安装步骤。
三 主从复制配置
按照单机版的按照步骤在另一台服务器上安装mysql,在搭建主从复制之前两台单机版的mysql之间是互相独立的,dajian 主从复制的原理就是从读取主的blog日志,将数据写入到从服务器
配置演示
主节点:192.168.194.161
从节点:192.168.194.162
MySQL版本:5.7.27
Linux:centOS7.6
3.1 主节点配置
-
编辑主节点配置文件
vi /etc/my.cnf
添加如下内容
log-bin=mysql-bin
server-id=1
innodb-file-per-table=ON
skip_name_resolve=ON
binlog-ignore-db=mysql
binlog_format=mixed
-
重启mysql服务
systemctl restart mysqld
-
查看MySQL信息
使用root用户登陆主节点
mysql -u root -p
查看二进制日志是否开启
show global variables like '%log%';
查看主节点二进制日志列表(已经生成的日志列表)
show master logs;
查看主节点的server id
show global variables like '%server%';
-
在主节点上创建有复制权限的用户
slave想要同步master上的数据首先肯定需要权限,所以我们要在master上面开通权限
grant replication slave, replication client on *.* to 'root'@'192.168.194.162' identified by '9o0p(O)P';
账号是root密码是9o0p(O)P ,允许192.168.194.162(从节点ip)这台机器向master发送同步请求,当然也可以设成其他用户
刷新一下授权信息,然后查看当前master的状态
flush privileges;
show master status;
3.2 从节点配置
-
编辑从节点配置文件
添加以下内容
relay-log=relay-log
relay-log-index=relay-log.index
server-id=2 #全局唯一的,不能和其他节点重复
innodb_file_per_table=ON
skip_name_resolve=ON
-
重启从节点
systemctl restart mysqld
-
查看从节点配置信息
使用root用户登陆从节点
mysql -u root -p
查看中继日志是否开启
show global variables like '%log%';
查看看server 相关信息
show global variables like '%server%';
-
在从节点配置访问主节点的参数信息
添加 主节点主机,访问主节点的用户名及密码,主节点二进制文件信息。
注意:主节点的二进制文件一定要是二进制列表中的最后一个二进制文件。
查看主节点的二进制文件
这里的二进制文件只有一个,如果数据库已经运行了一段时间,会产生多个二进制文件,这里添加的要使用最后一个生成的二进制文件
在从节点上执行下面命令配置访问主节点的参数信息
change master to master_host='192.168.194.161',master_user='root',master_password='9o0p(O)P',master_log_file='mysql-bin.000001',master_log_pos=775;
其中
master_host='192.168.194.161':主节点的ip
master_user='root':登陆主节点的用户名,可以是root用户
master_password='9o0p(O)P':登陆密码
master_log_file='mysql-bin.000001':主节点的最后一个二进制文件名
master_log_pos=775:主节点的最后一个二进制文件名File_size值
-
查看从节点的状态信息
show slave status\G (G要大写,如果是小写则显示的不整齐)
因为没有启动 从节点的复制线程,IO线程 和 SQL 线程都为NO.
-
启动复制线程
start slave;
再次查看从节点状态信息
至此,mysql的主----从复制配置完成。
3.3测试
-
创建数据库
在主节点创建一个数据库
create database mydb;
在从节点查看
show databases;
也可以使用客户端软件远程登陆测试数据的增删该操作,注意,远程登陆需要使用admin用户,root用户已经现在了远程登陆。
3.4主从复制架构中应注意的问题
从节点要设置某些限定使得它不能进行写操作,才能保证复制当中的数据一致。
-
限制从服务器为只读
在从服务器上设置:
read_only = ON,但是此限制对拥有SUPER权限 的用户均无效。
阻止所有用户:
mysq>FLUSH TABLES WITH READ LOCK;
-
如何保证主从复制时的事物安全?
1:在主节点设置参数
sync_binlog=1: Mysql开启bin-log日志使用bin-log时,默认情况下,并不是每次执行写入就与硬盘同步,这样在服务器崩溃时,就可能导致bin-log最后的语句丢失。可以通过这个参数来调节,sync_binlog=N,使执行N次写入后,与硬盘同步。1是最安全的,但是也是最慢的。
如果用到innode 存储引擎:innodb_flush_logs_at_trx_commit=ON(刷写日志:在事务提交时,要将内存中跟事务相关的数据立即刷写到事务日志中去。)
innodb_support_xa=ON (分布式事务:基于它来做两段式提交功能)
sync_master_info=1:每次给从节点dump一些事件信息之后,主节点的master info 信息会立即同步到磁盘上。让从服务器中的 master_info 及时更新。
2:在每个slave节点
skip_slave_start =ON (跳过自动启动,使用手动启动。)
relay_log也会在内从中先缓存,然后在同步到relay_log中去,可以使用下面参数使其立即同步。
sync_relay_log =1 ,默认为10000,即每10000次sync_relay_log事件会刷新到磁盘。为0则表示不刷新,交由OS的cache控制。
sync_relay_log_info=1每间隔多少事务刷新relay-log.info,如果是table(innodb)设置无效,每个事务都会更新
注: 在从节点中 master.info是记录在主节点复制位置的文件。
relylog_info: 本地将来至于主节点的哪一个二进制文件中position并且保存文本地哪一个中继日志中的哪一个postion. 从节点启动时也需要根据relay-log.info定位本地relay-log.
本文作者:莲藕淹,转载请注明原文链接:https://www.cnblogs.com/meanshift/p/15542415.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY