目录
1.如果不想用我的版本可以在官网上去找其他版本 :MySQL :: Download MySQL Community Server
2. 然后修改删除 /data/mysql/data 文件夹下的所有文件,再创建两个文件夹分别放两个实例的数据
单机环境搭建
环境准备
服务器:CentOS 8.2 64bit
mysql版本:mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
具体的版本其实没必要纠结,差不多的都行,首先第一步,创建一个路径来存放mysql的内容
我的路径:data
创建并进入文件操作
mkdir /data
cd /data
环境搭建
1.如果不想用我的版本可以在官网上去找其他版本 :MySQL :: Download MySQL Community Server
如果和我用一样的,直接跳过看第二步 ,我随便选的一个截图,都一样类似的
可以不用下载,右键按钮复制地址就行了
2.下载并解压文件
后面的连接就是刚才复制的地址
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz
如果没有wget 命令,自行安装一下: yum install wget
解压文件并修改文件名:
tar -zxvf mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
mv ./mysql-5.7.37-linux-glibc2.12-x86_64/ ./mysql
添加MySQL数据库运行的用户和用户组 并修改权限
groupadd -r mysql
useradd -r -g mysql mysql
chown -R mysql:mysql /data/mysql/ #修改目录权限
创建软连接到 /user/bin 目录,之后我们就能够直接使用 mysql 命令了
ln -s /data/mysql/bin/mysql /usr/bin
初始化数据库内容
/data/mysql/bin/mysqld --initialize --user=mysql --basedir=/data/mysql --datadir=/data/mysql/data
初始化后,会有初始密码,记得保存一下,后面好修改
创建 RSA 密钥
/data/mysql/bin/mysql_ssl_rsa_setup --datadir=/data/mysql/data/
设置开机自启动
cp /data/mysql/support-files/mysql.server /etc/init.d/mysqld
修改 /etc/init.d/mysqld 中的 basedir 和 datadir
加入开机自启动
chkconfig mysqld on
chkconfig --list mysqld
在全局配置文件中添加mysql可执行文件所在路径 /etc/profile
#mysql
export MYSQL_HOME=/data/mysql
export PATH=$MYSQL_HOME/bin:$PATH #加到末尾就行
修改完成后,下面命令生效配置:
source /etc/profile
修改my.cnf如下:路径默认/etc/my.cnf
[mysqld]
basedir = /data/mysql/
datadir=/data/mysql/data/
socket=/tmp/mysql.sock
log-error=/data/mysql/data/error.log
server-id=1
symbolic-links=0
language=/data/mysql/share/english
# 设置监听开放端口 [多实例中一定要不同]
port=3306
# 设置运行用户
user=mysql
# 设置UTF-8编码
character-set-server=utf8
#自动清理 30 天前的log文件,可根据需要修改
expire_logs_days=30
#设置最大连接数
max_connections=200
#设置最大等待时长(s)
wait_timeout=120
interactive_timeout=120
这里需要注意 mysql.sock 文件所在位置必须是 /tmp 目录下,否则会报找不到 sock 文件的错误。
启动服务:
/data/mysql/bin/mysqld --defaults-file=/etc/my.cnf &
登录修改密码:
mysql -u root -p #登录,密码是刚才复制的初始密码
use mysql;
update user set authentication_string = password('123456'), password_expired = 'N', password_last_changed = now() where user = 'root'; #设置密码
update user set Host = '%' where User = 'root';
FLUSH PRIVILEGES; #刷新生效
至此,单机版就启动成功,可以使用navicat连接测试下:
如果你3306的端口没开也是连接不上的:
安全组配置或者命令:
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
好了,单机版就搞定了
主从复制搭建
本文采用一主一从的方式,其实也可以理解为两个mysql实例,就是配置文件不一样,其他没啥区别
1.先在原来单机的基础上把现有的mysql先停掉
ps -aux|grep mysql #查看mysql进程
kill -9 进程号
2. 然后修改删除 /data/mysql/data 文件夹下的所有文件,再创建两个文件夹分别放两个实例的数据
rm -rf /data/mysql/data/
mkdir 3306 3307
3.将my.cnf复制到conf下分别修改
mkdir /data/mysql/conf #如果没有就新建
cp /etc/my.cnf /data/mysql/conf/3306.cnf
cp /etc/my.cnf /data/mysql/conf/3307.cnf #复制文件
rm -f etc/my.cnf #删除文件
3306配置:
[mysqld]
basedir = /data/mysql/
datadir=/data/mysql/data/3306/
socket=/tmp/3306.sock
log-error=/data/mysql/data/3306/error.log
server-id=1 #这个server-id和第二个要名称不一致
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
language=/data/mysql/share/english
# 设置监听开放端口 [多实例中一定要不同]
port=3306
# 设置运行用户
user=mysql
# 设置UTF-8编码
character-set-server=utf8
#自动清理 30 天前的log文件,可根据需要修改
expire_logs_days=30
#设置最大连接数
max_connections=1000
#设置最大等待时长(s)
wait_timeout=120
interactive_timeout=120
#主数据库配置
log_bin=master-bin
log_bin-index=master-bin.index
3307配置
[mysqld]
basedir = /data/mysql/
datadir=/data/mysql/data/3307/
socket=/tmp/3307.sock
log-error=/data/mysql/data/3307/error.log
server-id=2
# Disabling symbolic-links is recommended to prevent assorted security risks
log-bin=mysql-bin
language=/data/mysql/share/english
# 设置监听开放端口 [多实例中一定要不同]
port=3307
# 设置运行用户
user=mysql
# 设置UTF-8编码
character-set-server=utf8
#自动清理 30 天前的log文件,可根据需要修改
expire_logs_days=30
#设置最大连接数
max_connections=1000
#设置最大等待时长(s)
wait_timeout=120
interactive_timeout=120
#从数据库配置
#使得更新的数据写进二进制日志中
log-slave-updates=1
#relay-log-info-repository=TABLE
#relay-log-recovery
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
4.初始化3306、3307的数据库实例
/data/mysql/bin/mysqld --defaults-file=/data/mysql/conf/3306.cnf --basedir=/data/mysql/ --user=mysql --initialize-insecure --explicit_defaults_for_timestamp
/data/mysql/bin/mysqld --defaults-file=/data/mysql/conf/3307.cnf --basedir=/data/mysql/ --user=mysql --initialize-insecure --explicit_defaults_for_timestamp
5.分别启动两个实例
/data/mysql/bin/mysqld_safe --defaults-file=/data/mysql/conf/3306.cnf &
/data/mysql/bin/mysqld_safe --defaults-file=/data/mysql/conf/3307.cnf &
6.登录验证,需要指定具体的端口,不然会报错
mysql -uroot -p -P3306 -h127.0.0.1
默认密码是空,直接回车就能登录,如果不行就全局搜索一下文件mysqld.log,在里面找password
find / -name mysqld.log
两台都操作一下,修改密码
use mysql;
update user set Host = '%' where User = 'root';
update user set authentication_string = password('123456'), password_expired = 'N', password_last_changed = now() where user = 'root';
FLUSH PRIVILEGES;
再通过navicat连接一下两台数据库
注意,现在可以理解为只是两台数据库实例而已,还没有开始主从备份
7.主备设置
打开3306的连接,执行:show master status 查询主节点状态如下:
再打开3307的连接,运行如下代码:
CHANGE MASTER TO
MASTER_HOST='192.168.0.113', -- 主节点ip,我这是一台,就是本机的ip地址
MASTER_PORT=3306,
MASTER_USER='root',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='master-bin.000004',-- 对应查询主节点的file
MASTER_LOG_POS=154; -- 对应主节点的log行数
start slave; -- 启动从节点主从备份
运行完了想要检验下
show slave status;
这两个是yes,就没啥问题,可以尝试操作了,我在主节点创建了数据库test,创建数据表user_info,并添加数据,从节点也会自动同步数据:
至此,主从备份环境搭建完成,如果没有一次成功,主要还是在配置文件上面,或者权限问题上面,踩坑才是进步的。欢迎没有成功的小伙伴留言,我会对应帮忙处理