mysql主从复制

一、mysql主从复制原理

1、master将操作语句记录到binlog日志中,然后授予slave远程连接的权限(master一定要开启binlog二进制日志功能;通常为了数据安全考虑,slave也开启binlog功能)。

2、slave开启两个线程:IO线程和SQL线程。其中:IO线程负责读取master的binlog内容到中继日志relay log里;SQL线程负责从relay log日志里读出binlog内容,并更新到slave的数据库里,这样就能保证slave数据和master数据保持一致了。

3、Mysql复制至少需要两个Mysql的服务,当然Mysql服务可以分布在不同的服务器上,也可以在一台服务器上启动多个服务。

4、Mysql复制最好确保master和slave服务器上的Mysql版本相同(如果不能满足版本一致,那么要保证master主节点的版本低于slave从节点的版本)

5、master和slave两节点间时间需同步

二、安装mysql

1、检查安装环境

1.1、检查是否安装过mysql

[root@localhost ~]# rpm -qa | grep mysql
    #如果有就使用 rm -rf 命令删除
    [root@localhost ~]# whereis mysql
    mysql: /usr/lib64/mysql /usr/share/mysql
    [root@localhost ~]# rm -rf /usr/lib64/mysql /usr/share/mysql #删除
    [root@localhost ~]# find / -name mysql
    /etc/selinux/targeted/active/modules/100/mysql
    [root@localhost ~]# rm -rf /etc/selinux/targeted/active/modules

1.2、检查是否有mysql用户

若用户及用户组已存在,则略过这一步,没有则创建

[root@localhost ~]# id mysql
 id: mysql: no such user
[root@localhost ~]# groupadd mysql
[root@localhost ~]# useradd -r -g mysql mysql

1.3、检查库文件是否安装

[root@localhost ~]# rpm -qa|grep libaio
libaio-0.3.109-13.el7.x86_64  #我这里已经安装过了,若没有输出,则需要用yum安装

yum install  libaio-devel.x86_64

yum -y install numactl

2、下载

MySQL :: Download MySQL Community Server

下载完成后 用rz命令上传到 /soft/目录下

3、安装

[root@localhost local]# tar -xvf mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz  #解压
[root@localhost local]# mv mysql-8.0.27-linux-glibc2.12-x86_64 mysql-8.0.27   #重命名

#修改mysql 目录下所有文件的所属用户为root 所属组为root
[root@localhost local]# chown -R root:root /soft/mysql-8.0.27/

#创建数据存储目录,用以存储数据库数据
[root@localhost local]# mkdir data
#修改数据存储目录所属用户及所属组为mysql
[root@localhost local

4、在初始化之前请先确认/etc/my.cnf 已经不存在,否则在初始化是mysql会默认读取配置文件作为初始化。 若存在该文件,则如下将其改名,留作备份

[root@localhost mysql]# ll /etc/ | grep my.cnf
-rw-r--r--.  1 root root      570 Jun  8  2017 my.cnf
drwxr-xr-x.  2 root root       31 Dec 20 17:32 my.cnf.d

[root@localhost mysql]# mv /etc/my.cnf /etc/my.cnf.bak
[root@localhost mysql]# ll /etc/ | grep my.cnf
-rw-r--r--.  1 root root      570 Jun  8  2017 my.cnf.bak
drwxr-xr-x.  2 root root       31 Dec 20 17:32 my.cnf.d


#开始初始化
[root@localhost mysql]# /soft/mysql-8.0.27/bin/mysqld --initialize --user=mysql  --basedir=/soft/mysql-8.0.27 --datadir=/soft/mysql-8.0.27/data
#注意复制初始化密码  kw1n<XkP:qdh

5、修改配置

#进入MySQL安装目录support-files文件中,创建mysql-default.cnf 文件并添加权限
[root@localhost mysql]# cd /soft/mysql-8.0.27/support-files/
[root@localhost support-files]# touch mysql-default.cnf
[root@localhost support-files]# chmod 777 mysql-default.cnf

#将其复制到/etc/下,改名为my.cnf
[root@localhost support-files]# cp -a mysql-default.cnf /etc/my.cnf

vi /etc/my.cnf
#在my.cnf中添加配置
[mysqld]
basedir = /soft/mysql-8.0.27
datadir = /soft/mysql-8.0.27/data
socket = /tmp/mysql.sock
log-error = /soft/mysql-8.0.27/data/error.log
pid-file = /soft/mysql-8.0.27/data/mysql.pid
port = 3306
max_allowed_packet=32M

#修改配置文件权限
chmod 644 /etc/my.cnf

6、设置开机自启动

#复制mysql服务文件到/etc/init.d/目录下,重命名为mysql
[root@localhost support-files]# cp -a /soft/mysql-8.0.27/support-files/mysql.server /etc/init.d/mysql
#添加可执行权限
[root@localhost support-files]# chmod +x /etc/init.d/mysql

#注册服务
chkconfig --add mysql  #注册
chkconfig --list mysql  #检测

#/etc/ld.so.conf要配置路径,不然报错
[root@localhost support-files]# vim /etc/ld.so.conf
#在ld.so.conf中添加 mysql  的lib文件
/soft/mysql-8.0.27/lib

#配置环境变量
[root@localhost support-files]# vim /etc/profile
#末尾添加:
export PATH=$PATH:/soft/mysql-8.0.27/bin:/soft/mysql-8.0.27/lib
#重新加载使环境变量生效
[root@localhost support-files]# source /etc/profile

#启动服务
[root@localhost support-files]# service mysql start

7、修改默认密码

#使用初始化密码登录
[root@localhost support-files]# mysql -uroot -p

如果忘记初始密码:

mysq 8.0.27 忘记初始密码(修改密码) - 知乎

#修改密码
alter user 'root'@'localhost' identified by 'root';

8、开启远程连接

mysql> use mysql;
mysql> update user set host = '%' where user = 'root';
mysql> flush privileges;
mysql> GRANT ALL ON *.* TO 'root'@'%';
mysql> flush privileges;#防火墙设置
#暂时关闭防火墙
systemctl stop firewalld
#开放指定端口号
firewall-cmd --zone=public --add-port=8080/tcp --permanent
#移除已开放的端口号
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
#使防火墙设置生效
firewall-cmd --reload

三、数据同步

我们需要一个主节点,即主数据库mysql(为次数据库提供更新日志)

#主节点配置
#在 /etc/my.cnf中新增以下代码
#开启二进制日志
log_bin=master_bin
#设置当前节点全局唯一ID
server-id=7

#重启mysql服务
service mysql start
#查看从二进制日志的文件和位置开始进行复制
mysql> show master status;

创建有复制权限的用户账号
create user repluser@'10.70.20.%' identified by 'ldq12417';
mysql> grant replication slave on *.* to repluser@'10.70.20.%';

#从节点配置
#为当前节点设置一个全局惟的ID号
server_id=17
#开启二进制日志
log-bin=slave_log
#设置从数据库只读(对root用户无效)
read_only=ON
#relay log的文件路径
relay_log=relay-log
#默认值hostname-relay-bin.index
relay_log_index=relay-log.index

2、使用有复制权限的用户账号连接至主服务器,并启动复制线程

mysql> change master to master_host='10.70.20.126',master_user='repluser',master_password='ldq12417',master_log_file='master_bin.000003',MASTER_LOG_POS=3914,get_master_public_key=126;
 

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值