Mysql实现主从复制

薄洪涛5年前数据库1566

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

  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

标签: 主从复制

相关文章

redis中HyperLogLog基数统计

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

GROUP_CONCAT用法

GROUP_CONCAT用法

应用场景表A有一条数据,表B有3条数据,通过  A left join B 可以展示出3条数据,如图但是我想让name在一行显示SELECT A.id, GROUP_CONCAT(B.n...

CREATE TABLE 表名 AS SELECT 语句用法详解

新表不存在,创建新表1.创建新表并且携带数据create table new_table    as select *&...

PostgreSQL不常用很有用的数据类型

PostgreSQL不常用很有用的数据类型

最近新项目开始,需要设计数据库,技术大佬用了很多我之前没见过的数据库数据类型,这里做个总结1.货币类型money类型存储固定小数精度的货币数字,表中展示的范围假设有两个小数位。可接受的输入格式很多,包...

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

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

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

mysql报错:1118 - Row size too large

mysql报错:1118 - Row size too large

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

评论列表

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

已经更新链接!

发表评论    

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