900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > linuxcentos下mysql数据库的主从复制环境搭建【MySQL】

linuxcentos下mysql数据库的主从复制环境搭建【MySQL】

时间:2019-09-23 17:13:04

相关推荐

linuxcentos下mysql数据库的主从复制环境搭建【MySQL】

数据库|mysql教程

MySQL,Master,39,slave,size

数据库-mysql教程

有两台MySQL数据库服务器Master和slave,Master为主服务器,slave为从服务器,初始状态时,Master和slave中的数据信息相同,当Master中的数据发生变化时,slave也跟着发生相应的变化,使得master和slave的数据信息同步,达到备份的目的。

管理系统功能界面源码,ubuntu怎样设置代理,tomcat9启动时闪退,企业爬虫是否违法,php搭建网站用到的算法,助君seolzw

原理图如下:

php网站源码如何安装教程,vscode调试时无法输入,语音助手Ubuntu,sts如何设置tomcat,黑爬虫平台,php中的静态属性,seo优化推广哪家靠谱,安卓素材 网站,服务器运维网站模板lzw

c3p0 源码,vscode bom,ubuntu桌面软件,tomcat解说,sqlite 等于空,建设代理服务器,视觉差 插件,优秀前端框架特点,java开源网络爬虫,php语言基础,seo元标签,网站域名的设置,炫酷的网页预览,部队文章模板,html页面全屏显示,返现网v2.3版后台管理系统,delphi 程序多开lzw

简单来说,mysql的主从复制的原理就是slave把master上面执行的 update,insert这些会使数据发生改变的sql语句从master上面同步过来,然后在自己的机器上再执行一遍,那么这两台数据库服务器上的数据就一模一样了,而那些要同步的sql语句就存在bin-log文件里面

我这里有两台机器分别是192.168.1.6(master) 192.168.1.5(slave)

我们先从master机器开始配置

修改/etc/f 文件(mysql启动默认是从/etc/f读取的,所以你别的地方有配置文件的话建议直接移到/etc目录下)

[client]port = 3306socket = /usr/local/mysql/mysql.sock[mysqld]character-set-server = utf8collation-server = utf8_general_ciskip-external-lockingskip-name-resolveuser = mysqlport = 3306basedir = /usr/local/mysqldatadir = /home/mysql/datatmpdir = /home/mysql/temp# server_id = .....socket = /usr/local/mysql/mysql.socklog-error = /home/mysql/logs/mysql_error.logpid-file = /home/mysql/mysql.pidopen_files_limit = 10240back_log = 600max_connections=500max_connect_errors = 6000wait_timeout=605800#open_tables = 600#table_cache = 650#opened_tables = 630max_allowed_packet = 32Msort_buffer_size = 4Mjoin_buffer_size = 4Mthread_cache_size = 300query_cache_type = 1query_cache_size = 256Mquery_cache_limit = 2Mquery_cache_min_res_unit = 16ktmp_table_size = 256Mmax_heap_table_size = 256Mkey_buffer_size = 256Mread_buffer_size = 1Mread_rnd_buffer_size = 16Mbulk_insert_buffer_size = 64Mlower_case_table_names=1default-storage-engine = INNODBinnodb_buffer_pool_size = 2Ginnodb_log_buffer_size = 32Minnodb_log_file_size = 128Minnodb_flush_method = O_DIRECT#####################thread_concurrency = 32long_query_time= 2slow-query-log = onslow-query-log-file = /home/mysql/logs/mysql-slow.log ## replicationserver_id=6binlog-ignore-db=mysqllog-bin=master-mysql-binbinlog_cache_size=1Mbinlog_format=mixedexpire_logs_days=7slave_skip_errors=1062[mysqldump]quickmax_allowed_packet = 32M[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid

这里主要的配置就是和复制相关的这段配置,其它配置是mysql源码安装时配置,里面具体参数代表什么意思可以网上搜一下,文档很多的

## replicationserver_id=6binlog-ignore-db=mysqllog-bin=master-mysql-binbinlog_cache_size=1Mbinlog_format=mixedexpire_logs_days=7slave_skip_errors=1062

我简单解释一下,复制有关的参数

serverid 全局唯一的

binlog-ignore-db=mysql复制过滤,我们不同步mysql系统自带的数据库

log-bin=master-mysql-bin 开启logbin功能并设置logbin文件的名称

binlog_format=mixed 混合型复制模式,默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。

接下来重启mysql服务并用客户端登录

slave想要同步master上的数据首先肯定需要权限,所以我们要在master上面开通权限

grant replication slave, replication client on *.* to oot@192.168.1.5 identified by oot;

账号和密码都是root ,允许192.168.1.5这台机器向master发送同步请求,当然你可以设成别的,我这里只是为了方便记忆,设了太多不同的密码容易忘记

刷新一下授权信息,然后查看当前master的状态

show master status,我这里解释一下,我们知道关于对数据库修改的sql全部记录在了bin-log里面,那么我们就每次都把bin-log里面的sql全部执行一遍?肯定不是,我们肯定要记录我上次复制到哪儿里了,然后我下次再从这个点开始同步,就像我们玩单机游戏闯了3关以后要存下档一样,下次玩我们继续从第三关开始玩,这是一个意思。

接下来我们随便写点测试数据到数据库里面去

create database if not exists pcx default charset utf8 collate utf8_general_ci;use pcx;DROP TABLE IF EXISTS `fruits`;CREATE TABLE fruits(f_id char(10)NOT NULL,s_id INT NOT NULL,f_name char(255) NOT NULL,f_price decimal(8,2) NOT NULL,PRIMARY KEY(f_id) )ENGINE=InnoDB DEFAULT CHARSET=utf8 ;INSERT INTO fruits (f_id, s_id, f_name, f_price)VALUES(a1, 101,apple,5.2),(1,101,lackberry, 10.2),(s1,102,orange, 11.2),(s2,105,melon,8.2),( 1,102,anana, 10.3),( 2,102,grape, 5.3),(o2,103,coconut, 9.2),(c0,101,cherry, 3.2),(a2,103, apricot,2.2),(l2,104,lemon, 6.4),(2,104,erry, 7.6),(m1,106,mango, 15.6),(m2,105,xbabay, 2.6),( 4,107,xbababa, 3.6),(m3,105,xxtt, 11.6),(5,107,xxxx, 3.6);

接下来我们把pcx这个库下的数据全部备份下来

首先我们要锁表

flush tables with read lock;

接下来用mysql的备份命令进行备份

最后我们把edu-master.sql发送到slave的机器上面

好了,我们接下来开始配置slave(192.168.1.5)

同样打开f文件开始配置

vi /etc/f

[client]port = 3306socket = /usr/local/mysql/mysql.sock[mysqld]character-set-server = utf8collation-server = utf8_general_ciskip-external-lockingskip-name-resolveuser = mysqlport = 3306basedir = /usr/local/mysqldatadir = /home/mysql/datatmpdir = /home/mysql/temp# server_id = .....socket = /usr/local/mysql/mysql.socklog-error = /home/mysql/logs/mysql_error.logpid-file = /home/mysql/mysql.pidopen_files_limit = 10240back_log = 600max_connections=500max_connect_errors = 6000wait_timeout=605800#open_tables = 600#table_cache = 650#opened_tables = 630max_allowed_packet = 32Msort_buffer_size = 4Mjoin_buffer_size = 4Mthread_cache_size = 300query_cache_type = 1query_cache_size = 256Mquery_cache_limit = 2Mquery_cache_min_res_unit = 16ktmp_table_size = 256Mmax_heap_table_size = 256Mkey_buffer_size = 256Mread_buffer_size = 1Mread_rnd_buffer_size = 16Mbulk_insert_buffer_size = 64Mlower_case_table_names=1default-storage-engine = INNODBinnodb_buffer_pool_size = 2Ginnodb_log_buffer_size = 32Minnodb_log_file_size = 128Minnodb_flush_method = O_DIRECT#####################thread_concurrency = 32long_query_time= 2slow-query-log = onslow-query-log-file = /home/mysql/logs/mysql-slow.log ## replicationserver_id=5binlog-ignore-db=mysqllog-bin=mysql-slave-binbinlog_cache_size = 1Mbinlog_format=mixedexpire_logs_days=7slave_skip_errors=1062relay_log=mysql-relay-binlog_slave_updates=1read_only=1[mysqldump]quickmax_allowed_packet = 32M[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid

配置文件和master的差不多,主要差别在一下几点

log-bin=mysql-slave-bin开启了二进制日志,实际上不开也没关系,因为我们这个slave只是做slave,如果你这台slave还有可能要做别人的master的话那么必须开启

relay_log=mysql-relay-bin配置中继日志,用来存放从master的bin-log那边同步来的数据

配置好后重启数据库服务

service mysql restart

我们首先要创建一下数据库,因为我们备份下来的数据库文件里面是不包含创建数据库的命令的,所以我们要手动创建一下

把我们从master那边备份过来的数据恢复到slave中

登录 Slave 数据库

在mysql客户端中输入一下命令连接master

change master to ,

master_host=’192.168.1.6′ master主机的ip地址

master_user=’root’,

master_password=’root’, 我们刚刚在master有执行过授权的账号密码就是这个

master_port=3306,master数据库的端口号

master_log_file=’edu-mysql-bin.000002′,

master_log_pos=427, 这个是我们通过show master status看到的position

master_connect_retry=30;

使用命令查看slave状态,我们可以看到slave目前还未开始同步

show slave status\G;

开始主从同步,主要看到两个yes就代表同步成功了

start slave;

在master机器上查看状态,可以看见slave的连接信息

show processlist\G;

接下来我们测试一下主从复制的功能

master 上原来的数据

这是我插入的记录

我们到slave上面看看有没有,有就代表成功了

至此mysql原生支持的主从复制搭建完毕,当然我们说mysql的主从复制

性能上回有延迟,master上的数据不是无延迟的同步到slave上面,所以如果你对数据的一致性要求非常高的话,那么mysql官方的主从复制就不合适了,可以考虑用别的数据同步方案例如“Galera Cluster for MySQL” ,当然也有人说mysql官方支持的主从复制只是适合在中小规模的集群下运行。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。