Mysql主从复制搭建过程:
- 主从需同步时间,主开启ntpd(ntp网络时间协议,它的端口号udp123)服务-----修改配置,从通过/usr/sbin/ntpdate 主ip(ntpdate包需要提前安装);
- 主:开启中继二进制日志;
- 主上进行从授权
- 从:同步主
Mysql主从复制原理:
主master服务器将数据的改变都记录到二进制binlog日志中,只要master上的数据发生改变,则将其改变写入二进制日志;
从salve服务器会在一定时间间隔内对主master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/O Thread请求主master二进制事件
同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中;
从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致
最后I/O Thread和SQL Thread将进入睡眠状态,等待下一次被唤醒。
- 环境基础配置
192.168.6.128 主
192.168.6.129 从
128、129都操作
# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
# systemctl stop firewalld
128上操作
# hostnamectl set-hostname db1 #修改主机名
# vim /etc/hosts
192.168.6.128 db1
192.168.6.129 db2
129上操作
#hostnamectl set-hostname db2
# vim /etc/hosts
192.168.6.128 db1
192.168.6.129 db2
2.安装数据库(128、129都操作)
2.1创建安装用户mysql
# useradd mysql
# passwd mysql #生产环境建议配置账号密码
2.2设置ulimit参数
# vim /etc/security/limits.conf
文件最后添加
* soft nofile 65536
* hard nofile 131072
* soft nproc 65536
* hard nproc 65536
# yum install -y libaio
# vim /etc/my.cnf
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
socket = /tmp/mysql.sock
datadir = /data/mysql
skip-name-resolve
lower_case_table_names=1
character-set-server=utf8
sql_mode=NO_ENGINE_SUBSTITUTION
default_password_lifetime=0
[mysql]
no-auto-rehash
#解压缩安装包
# wget -c https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.25-linux-glibc2.12-x86_64.tar
# tar xf mysql-8.0.25-linux-glibc2.12-x86_64.tar -C /usr/local/
# cd /usr/local/
# mv mysql-8.0.25-linux-glibc2.12-x86_64 mysql
# cd /usr/local/mysql
# chown -R mysql.mysql /usr/local/mysql
#创建数据存放目录
# mkdir -p /data/mysql
# chown -R mysql.mysql /data/mysql
# chmod -R 755 /usr/local/mysql/
#执行初始化命令
# bin/mysqld --initialize --user=mysql --datadir=/data/mysql
如下图红框内是初始密码,需要记录下来。
将mysql注册为系统服务
# cd /usr/local/mysql
# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
# chmod 700 /etc/rc.d/init.d/mysqld
# service mysqld start
本地连接数据库,密码是上图红框中的初始密码
# cd /usr/local/mysql/bin/
# ./mysql -uroot -p
连接mysql后执行下列命令,修改初始密码和访问权限:
Mysql> alter user 'root'@'localhost' IDENTIFIED BY '123456';
Mysql> use mysql;
Mysql> update user set host = '%' where user = 'root' and host='localhost';
Mysql> flush privileges;
3.搭建主从复制
检查两台主机的时间是否一致
# date
3.1修改主配置文件
# vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin
log-slave-updates=true
server-id=1
# service mysqld restart
mysql -uroot -p
mysql>create user 'myslave'@'192.168.6.129' identified with mysql_native_password by '123456';
mysql>GRANT ALL ON *.* TO 'myslave'@'192.168.6.129';
mysql> flush privileges;
Mysql>show master status\G;
记下这两个参数
3.2修改从上的配置
# vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin
log-slave-updates=true
server-id=2
# service mysqld restart
# mysql -uroot -p
Mysql>change master to master_host='192.168.6.128',master_user='myslave',master_password='123456',master_log_file='mysql-bin.000013',master_log_pos=1008;
Mysql> flush privileges;
Mysql> start slave;
Mysql>show slave status\G;
如图显示是正常的,主从就搭建好了,可以做些测试,看数据是否同步
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.6.128 //主服务器地址
Master_User: myslave //授权帐户名,尽量避免使用root
Master_Port: 3306 //数据库端口,部分版本没有此行
Connect_Retry: 60
Master_Log_File: mysql-bin.000013
Read_Master_Log_Pos: 1223 //#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos
Relay_Log_File: localgist-relay-bin.000015
Relay_Log_Pos: 1223
Relay_Master_Log_File: mysql-bin.000013
Slave_IO_Running: Yes //此状态必须YES
Slave_SQL_Running: Yes //此状态必须YES
3.3验证主从复制
主库上创建数据库或表数据
# mysql -uroot -p
Mysql>create database test;
Mysql> use test;
mysql> create table tb1(id int,name varchar(20));
Mysql> inster into tb1 (id,name) values(1,’zhangsan’);
从库上进行查看,是否同步
# mysql -uroot -p
Mysql> show databases; 查看是否同步
Mysql> use test;
Mysql> show tables;
Mysql> select * from tb1;
主库从库数据一致,主从搭建成功。