最近使用最新的CentOS Stream release 8 百度各种大佬mysql5.7主从复制的搭建,一步步去摸索搭建,最后验证成功,所以整理出个文档,希望能帮助需要使用的人儿。
如果是新服务器,需要安装
yum -y install vim
yum -y install wget
yum -y install libncurses*
等等等等
1、服务环境
master:10.110.238.21,centos stream 8,mysql5.7
slave: 10.110.238.22,centos stream 8,mysql5.7
注意两服务下载的mysql版本需要一致。
注:以下两台服务器按同样步骤操作
2、创建安装目录和下载安装包
mkdir /apps/mysql57 -p
cd /apps/mysql57
检查自带mariadb:rpm -qa | grep mariadb
有的话执行rpm -e --nodeps mariadb-libs-xxxxxxx
下载mysql
wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz
得到mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz
tar -zxvf mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.19-linux-glibc2.12-x86_64 mysql
新建mysql用户、组及目录:
groupadd mysql
useradd -r -s /sbin/nologin -g mysql mysql -d /apps/mysql57/mysql
chown mysql.mysql mysql -R
mkdir data
chown -R mysql /apps/mysql57/data
3准备安装:
cd mysql
bin/mysqld --initialize --user=mysql --basedir=/apps/mysql57/mysql --datadir=/apps/mysql57/data
这是安装成功后记录下 临时密码如
A temporary password is generated for root@localhost: To?l;qsfN2Nz
4修改系统配置文件
cd support-files
cp mysql.server /etc/init.d/mysqld
【master】新建并配置vim /etc/my.cnf
[client]
port=3306
socket=/apps/mysql57/data/mysql.sock
[mysqld]
user = mysql
server-id = 1
innodb_buffer_pool_size = 2G
log_bin = mysql-bin
sync_binlog=0
binlog_format = mixed
expire_logs_days=7
max_binlog_size = 100M
binlog_cache_size=4m
max_binlog_cache_size=512m
lower_case_table_names=1
character-set-server=utf8
max_connections=1000
group_concat_max_len = 204800
max_allowed_packet=32m
log-error=/apps/mysql57/mysql.log
basedir=/apps/mysql57/mysql
datadir=/apps/mysql57/data
socket=/apps/mysql57/data/mysql.sock
pid-file=/apps/mysql57/mysqld.pid
【slave】新建并配置vim /etc/my.cnf
[client]
port=3306
socket=/apps/mysql57/data/mysql.sock
[mysqld]
user = mysql
server-id = 2
innodb_buffer_pool_size = 2G
log_bin = mysql-bin
sync_binlog=0
binlog_format = mixed
expire_logs_days=7
max_binlog_size = 100M
binlog_cache_size=4m
max_binlog_cache_size=512m
lower_case_table_names=1
character-set-server=utf8
max_connections=1000
group_concat_max_len = 204800
max_allowed_packet=32m
log-error=/apps/mysql57/mysql.log
basedir=/apps/mysql57/mysql
datadir=/apps/mysql57/data
socket=/apps/mysql57/data/mysql.sock
pid-file=/apps/mysql57/mysqld.pid
vim /etc/profile
找到最后一行:输入export PATH=/apps/mysql57/mysql/bin:$PATH
source /etc/profile
chown -R mysql:mysql /apps/mysql57
5、启动和登录
service mysql start
service mysql status 查看状态active (running)
以上两台服务器数据库都启动成功!
自动启动:
chmod 755 /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 345 mysqld on
登录
mysql -u root -p 输入临时密码进行登录
错误:error while loading shared libraries: libncurses.so.5: cannot open shared object file
分析:缺少 libncurses.so.5
yum -y install libncurses*
修改密码 set password=password(‘cXߦa');
flush privileges;
以上两库完成安装、登录、修改i密码等相同操作
6、主库调整
创建其他用户:【主库】
create user 'Aydbm'@'localhost' identified by 'X&20%22!';
grant all privileges on *.* to 'Aydbm'@'10.110.238.22' identified by 'X&20%22!';
flush privileges;
use mysql;
select host,user from user;
在主库上操作
授权给从数据库服务器:
GRANT REPLICATION SLAVE ON *.* to 'Aydbm'@'10.110.238.21' identified by 'X&20%22!';
GRANT REPLICATION SLAVE ON *.* to 'Aydbm'@'10.110.238.22' identified by 'X&20%22!';
flush privileges;
查询主数据库状态
7、从库操作:
change master to master_host='10.110.238.21',master_user='Aydbm',master_password='X&20%22!',master_log_file='mysql-bin.000005',master_log_pos=2316,master_port=3306;
正确执行后启动Slave同步进程
start slave;
在从库中进行主从同步检查
mysql> show slave status\G;
其中Slave_IO_Running 与 Slave_SQL_Running 的值都必须为YES,才表明状态正常;
如果出现
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes
排查如下问题
1.网络不通
2.账户密码错误
3.防火墙
4.mysql配置文件问题
5.连接服务器时语法
6.主服务器mysql权限
centos7防火墙
#进程与状态相关
systemctl start firewalld.service #启动防火墙
systemctl stop firewalld.service #停止防火墙
systemctl status firewalld #查看防火墙状态
systemctl enable firewalld #设置防火墙随系统启动
systemctl disable firewalld #禁止防火墙随系统启动
firewall-cmd --state #查看防火墙状态
firewall-cmd --reload #更新防火墙规则
#端口控制
firewall-cmd --query-port=8080/tcp # 查询端口是否开放
firewall-cmd --add-port=8080/tcp --permanent #永久添加8080端口例外(全局)
firewall-cmd --remove-port=8800/tcp --permanent #永久删除8080端口例外(全局)
firewall-cmd --add-port=65001-65010/tcp --permanent #永久增加65001-65010例外(全局)
firewall-cmd --zone=public --add-port=8080/tcp --permanent #永久添加8080端口例外(区域public)
firewall-cmd --zone=public --remove-port=8080/tcp --permanent #永久删除8080端口例外(区域public)
主服务器上的操作 验证主从复制效果
创建数据库和数据库表 自己认证下
在这个过程中如果遇到出错等相关问题可留言一起解决/