Linux下mysql主从复制搭建,linuxcentos下mysql数据库的主从复制环境搭建

简单来说,mysql的主从复制的原理就是slave把master上面执行的

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

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

我们先从master机器开始配置

修改/etc/my.cnf

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

[client]

port = 3306

socket = /usr/local/mysql/mysql.sock

[mysqld]

character-set-server = utf8

collation-server = utf8_general_ci

skip-external-locking

skip-name-resolve

user = mysql

port = 3306

basedir = /usr/local/mysql

datadir = /home/mysql/data

tmpdir = /home/mysql/temp

# server_id = .....

socket = /usr/local/mysql/mysql.sock

log-error = /home/mysql/logs/mysql_error.log

pid-file = /home/mysql/mysql.pid

open_files_limit = 10240

back_log = 600

max_connections=500

max_connect_errors = 6000

wait_timeout=605800

#open_tables = 600

#table_cache = 650

#opened_tables = 630

max_allowed_packet = 32M

sort_buffer_size = 4M

join_buffer_size = 4M

thread_cache_size = 300

query_cache_type = 1

query_cache_size = 256M

query_cache_limit = 2M

query_cache_min_res_unit = 16k

tmp_table_size = 256M

max_heap_table_size = 256M

key_buffer_size = 256M

read_buffer_size = 1M

read_rnd_buffer_size = 16M

bulk_insert_buffer_size = 64M

lower_case_table_names=1

default-storage-engine = INNODB

innodb_buffer_pool_size = 2G

innodb_log_buffer_size = 32M

innodb_log_file_size = 128M

innodb_flush_method = O_DIRECT

#####################

thread_concurrency = 32

long_query_time= 2

slow-query-log = on

slow-query-log-file = /home/mysql/logs/mysql-slow.log

## replication

server_id=6

binlog-ignore-db=mysql

log-bin=master-mysql-bin

binlog_cache_size=1M

binlog_format=mixed

expire_logs_days=7

slave_skip_errors=1062

[mysqldump]

quick

max_allowed_packet = 32M

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

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

## replication

server_id=6

binlog-ignore-db=mysql

log-bin=master-mysql-bin

binlog_cache_size=1M

binlog_format=mixed

expire_logs_days=7

slave_skip_errors=1062

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

serverid 全局唯一的

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

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

binlog_format=mixed

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

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

a4c26d1e5885305701be709a3d33442f.png

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

grant replication slave, replication client on *.* to 'root'@'192.168.1.5' identified by

'root';

账号和密码都是root

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

a4c26d1e5885305701be709a3d33442f.png

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

a4c26d1e5885305701be709a3d33442f.png

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),

('b1',101,'blackberry', 10.2),

('bs1',102,'orange', 11.2),

('bs2',105,'melon',8.2),

('t1',102,'banana', 10.3),

('t2',102,'grape', 5.3),

('o2',103,'coconut', 9.2),

('c0',101,'cherry', 3.2),

('a2',103, 'apricot',2.2),

('l2',104,'lemon', 6.4),

('b2',104,'berry', 7.6),

('m1',106,'mango', 15.6),

('m2',105,'xbabay', 2.6),

('t4',107,'xbababa', 3.6),

('m3',105,'xxtt', 11.6),

('b5',107,'xxxx', 3.6);

a4c26d1e5885305701be709a3d33442f.png

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

首先我们要锁表

flush tables with read lock;

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

a4c26d1e5885305701be709a3d33442f.png

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

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

同样打开my.cnf文件开始配置

vi /etc/my.cnf

[client]

port = 3306

socket = /usr/local/mysql/mysql.sock

[mysqld]

character-set-server = utf8

collation-server = utf8_general_ci

skip-external-locking

skip-name-resolve

user = mysql

port = 3306

basedir = /usr/local/mysql

datadir = /home/mysql/data

tmpdir = /home/mysql/temp

# server_id = .....

socket = /usr/local/mysql/mysql.sock

log-error = /home/mysql/logs/mysql_error.log

pid-file = /home/mysql/mysql.pid

open_files_limit = 10240

back_log = 600

max_connections=500

max_connect_errors = 6000

wait_timeout=605800

#open_tables = 600

#table_cache = 650

#opened_tables = 630

max_allowed_packet = 32M

sort_buffer_size = 4M

join_buffer_size = 4M

thread_cache_size = 300

query_cache_type = 1

query_cache_size = 256M

query_cache_limit = 2M

query_cache_min_res_unit = 16k

tmp_table_size = 256M

max_heap_table_size = 256M

key_buffer_size = 256M

read_buffer_size = 1M

read_rnd_buffer_size = 16M

bulk_insert_buffer_size = 64M

lower_case_table_names=1

default-storage-engine = INNODB

innodb_buffer_pool_size = 2G

innodb_log_buffer_size = 32M

innodb_log_file_size = 128M

innodb_flush_method = O_DIRECT

#####################

thread_concurrency = 32

long_query_time= 2

slow-query-log = on

slow-query-log-file = /home/mysql/logs/mysql-slow.log

## replication

server_id=5

binlog-ignore-db=mysql

log-bin=mysql-slave-bin

binlog_cache_size = 1M

binlog_format=mixed

expire_logs_days=7

slave_skip_errors=1062

relay_log=mysql-relay-bin

log_slave_updates=1

read_only=1

[mysqldump]

quick

max_allowed_packet = 32M

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-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

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

a4c26d1e5885305701be709a3d33442f.png

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

a4c26d1e5885305701be709a3d33442f.png

登录 Slave 数据库

a4c26d1e5885305701be709a3d33442f.png

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

a4c26d1e5885305701be709a3d33442f.png

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;

a4c26d1e5885305701be709a3d33442f.png

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

start slave;

a4c26d1e5885305701be709a3d33442f.png

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

show processlist\G;

a4c26d1e5885305701be709a3d33442f.png

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

master 上原来的数据

a4c26d1e5885305701be709a3d33442f.png

这是我插入的记录

a4c26d1e5885305701be709a3d33442f.png

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

a4c26d1e5885305701be709a3d33442f.png

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值