Mysql实现主从复制

薄洪涛5年前数据库1482

在开始教程之前,必须要先说说为什么要搞主从复制

  1. 线上环境,我们必须要对正式数据库的数据进行备份,保持备份数据库和正式库的数据实时一致

  2. 业务层面:业务量越来越大,对数据库的查询越来越高,数据库服务器的压力越来越大,此时通过堆硬件不是很好的解决方法,所以一般要做读写分离,及主库和从库数据实现实时复制,业务的处理在主库中进行,数据的查询在从库进行,通常,主从库的比例为1:7左右

再说下主从复制的原理

    1. mysql数据库有个二进制日志文件,用来记录数据库所执行的sql语句

    2. 我们需要做的就是把主库的日志文件拿过来,读取里面的内容,然后在从库中执行一次就可以实现保持数据库的数据一致

开始教程

    1. 安装环境(mysql5.6)

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum install mysql-community-server -y

    2. 启动mysql服务并设置开机启动

# start是启动  stop是关闭  restart是重启
service mysqld start
systemctl enable mysqld

    3. 设置mysql的用户资料及密码,这块自己看着来就可以,记得要建立root账户及密码

mysql_secure_installation

    4. 登录mysql并允许root用户远程登录

# 登录mysql
mysql -uroot -p   (这里执行后输入密码)
# 下面这句话是赋权限,允许远程登录
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED     BY 'yourpassword' WITH GRANT OPTION;
# 刷新权限
flush privileges;
# 执行完之后eit退出

    5. 主库配置

vim /etc/my.cnf

    增加以下配置(切记放在 [mysqld] 下面),配置完后重启mysql服务(service mysqld restart)

log-bin = mysql-bin
binlog_format = mixed
server-id =1
innodb-file-per-table =ON
skip_name_resolve=ON

    6. 重新登录mysql(如果你是从头开始安装的话,日志应该会有一条,我这里有3条)

show master logs;

image.png

查看主节点server id

image.png

查看二进制日志是否开启

image.png

然后这就是主库的配置,最后一步要记得关闭防火墙或者放行3306端口,主从库都要哦

放行命令

开端口命令:firewall-cmd --zone=public --add-port=3306/tcp --permanent
重启防火墙:systemctl restart firewalld.service

现在我们开始配置从库

安装过程都是一样的,主要是配置/etc/my.cnf,同样放[mysqld]下

relay-log=relay-log
relay-log-index=relay-log.index
server-id=12innodb_file_per_table=ON
skip_name_resolve=ON

然后重启mysql,登录mysql

 show global variables like '%log%';

image.png

执行以下命令,添加主库,信息要自己改一下,日志的名字和偏移量可以在主库上执行show master logs获取

CHANGE MASTER TO MASTER_HOST='192.168.71.129',MASTER_USER='root',MASTER_PASSWORD='root', MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=4323;

然后启动进程(复制日志的进程和执行sql的进行)

start slave

查看进程状态

image.png

如果是两个yes测试就可以了

image.png

注意:如果新建了数据库,需要stop slave,然后设置日志文件及偏移量之后start slave

标签: 主从复制

相关文章

mysql报错:1118 - Row size too large

mysql报错:1118 - Row size too large

前几天在建表的时候,有这么一个现象,因为我的表字段比较多(一个患者的体检表项目繁多,不要问我为什么不分表了),字段类型为varchar类型,结果保存的时候报了如下的错误原因:MySQL在建表的时候有个...

redis查找附近的人

Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 版本新增。Redis GEO 操作方法有:geoadd:添加地理位置的坐标。geopos:获取地理位...

摘抄--别在MySQL中使用UTF-8

摘抄--别在MySQL中使用UTF-8

直接看复现过程insert into user (id,name,sex) values (1,'机智如我','男')[Err] 1366 -&nb...

记录一次从日志中恢复mysql数据库数据

记录一次从日志中恢复mysql数据库数据

前因:有个大佬在update的时候,忘记加where条件,造成线上数据库中的某个状态值全部被修改,需要马上处理首先面对这种情况,我马上想到的就是从二进制日志文件中恢复,马上查看是否开启了日志,确定开启...

redis中HyperLogLog基数统计

简介Redis 在 2.8.9 版本添加了 HyperLogLog 结构。Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常...

pg库中数组形式字段浅显使用

pg库中数组形式字段浅显使用

我们在最近的项目中,数据表中某些字段类型是数组,举个例子但是问题来了,比如我想要搜索数组中的数据,比如搜索所有flags含有popforum_recommend_topics 的行,需要怎么写sql呢...

评论列表

行星带
2019-11-15 16:28:09

已经更新链接!

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。