简单的一个完整 M-S 配置:
step1
1
2
3
4
5
6
|
slave是通过msyql连接到master上读取二进制的,所以需要在master上给slave配置权限
mysql>
grant
replication slave,replication client
on
*.*
to
'repl'
@
'slave-ip'
identified
by
'passwowrd'
mysql>flush
privileges
;
到slave测试连接是否成功
mysql -urepl -h master-ip -p
|
step2:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
在master打开二进制日志,并表示server-id 只是主库开启以下参数
[mysqld]
#general
basedir = /usr/
local
/mysql
datadir = /usr/
local
/mysql/data
socket = /tmp/mysql.sock
user
= mysql
port = 3306
server_id = 1
log-error = /usr/
local
/mysql/logs/mysql-master.err
pid = /usr/
local
/mysql/data/mysql-master.pid
#binlog
log-bin = /usr/
local
/mysql/data/mysql-bin
sync-binlog = 1
#InnoDB
innodb_flush_log_at_trx_commit
innodb_support_xa = 1 保持binlog和 innodb redo log数据一致性,
#other
character_set_server = utf8
default_storage_engine =InnoDB
ft_min_word_len = 1
open_files_limit = 65535
[client]
socket = /tmp/mysql.sock
port = 3306
#/service mysqld restart
|
step3:
1
2
3
|
制作一个master的完整备份,并执行
prepare
,用于slave的搭建、
#innobackupex
--user=root --password=xxxx /root/backup
#innobackupex
--use-memory=500m --apply-log /root/backup/2014-10-10-/
|
step4:
1
2
3
|
将备份拷贝到slave,并放入数据文件目录
scp -r /root/backup/2014-10-10- /usr/
local
/mysql/data/
chwow -R mysql:msyql /usr/
local
/mysql/data/
|
step5
配置slave
1
2
3
4
5
6
|
relay-log=/usr/
local
/mysql/data/mysql-relay-bin good;specifies a path
and
base
name
log_slave_updates=1 允许备库将其重放的事件也记录到自身的二进制日志中
read_only=1 阻止任何没有特权权限的线程修改数据
server_id=2 必须的 ,身份识别
skip_slave_start 阻止备库在奔溃恢复后自动启动复制
/etc/init.d/mysqld restart
|
step6:
1
2
3
4
5
6
7
|
查看并记录二进制日志的position ID
in
slave:
pwd /usr/
local
/mysql/data/
cat xtrabackup_binlog_info
localhost.000001 120
或者在master上执行
show master status\G;
|
step7:
1
2
3
4
5
6
7
|
in
slave 配置slave replication ,启动复制
change master
to
master_host=
'master-ip'
,
master_user=
'repl'
,
master_password=
'123456'
,
master_log_file=
'localhost-bin.000001'
,
master_log_pos=120;
|
step8:
1
2
3
4
5
|
start slave;
show slave status\G;
如果这两显示yes,说明配置成功
slave_io_running :yes
slave_sql_running :yes
|
step9:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
观察线程列表
in
master:
mysql> show processlist \G;
*************************** 1. row ***************************
Id: 1
User
: repl
Host: 192.168.2.23:26962
db:
NULL
Command: Binlog Dump
Time
: 96460
State: Master has sent
all
binlog
to
slave; waiting
for
binlog
to
be updated
Info:
NULL
在主库可以看到备库I/O线程向主库发起的链接,即master的binlog dump线程
in
salve :
Id: 1
User
: system
user
Host:
db:
NULL
Command:
Connect
Time
: 364
State: Slave has
read
all
relay log; waiting
for
the slave I/O thread
to
update
it
Info:
NULL
*************************** 2. row ***************************
Id: 2
User
: system
user
Host:
db:
NULL
Command:
Connect
Time
: 96786
State: Waiting
for
master
to
send event
Info:
NULL
这些简单的输出有来自一台运行了一段时间的服务器,所以I/O线程在主库和备库上的
time
值较大。
SQL线程已经空闲了364秒,这意味着,这364秒没有重放任何事件,当sql线程重放时候,info列可能会显示正在查询。
|
1
2
3
4
5
6
7
|
stp1的解释说明
#复制账户事实上只需要主库的replication slave权限,并不一定每段有replication client权限,那么为什么我们还需要把这两宗权限都复制给主/备库呢 ???
1,用来监控和管理复制的账号需要replication client权限,并且针对这两种目的使用的同一个账号更加容易。
2,如果在主库上建立了账号,然后从主库将数据克隆到备份库上时候,北路也设置好了
---变成主库所需要的配置,这样以后方便交换主备角色、
step2:的解释说明
请查看mysql的配置参数详解
|
mysql 主从复制授权多种方案详解:
1,生产授权方案1
主库: web_app 123paswd 10.1.1.2 3306 (all privileges)
从库: 主库的we_app用户同步到从库,然后收回(insert,update,delete权限
保险起见:
在slave库,设置read-only参数,确保从库只读
2,生产授权方案2
主库:web_w 123paswd 10.1.1.2 3306 (all privileges)
从库:web_R 123paswd 10.1.1.2 3306 (select)
风险:web_w连接从库
开发 :多套用户密码,不专业
保险起见:
在slave库,设置read-only参数,确保从库只读
3,生产授权方案3
不同步mysql库,主从库分别进行如下授权
主库:web 123paswd 10.1.1.2 3306 (all privileges)
从库:web 123paswd 10.1.1.2 3306 (select)
缺陷:从库切换到主库的时候,链接用户权限问题
保险起见:
在slave库,设置read-only参数,确保从库只读
注意:read-only参数
read-only参数可以让slave服务器只允许来自slave服务器线程或具有super权限的用户更新,可以确保slave服务器不接受来自普通用户的更新
以上的super权限是指:
1,某一个具有(all privileges)的用户
2, root 用户
百度做法:
保留一个从库,时刻准备接替master,作为新的master,此时的slave全部复制master,不忽略mysql库
本文转自crazy_charles 51CTO博客,原文链接:http://blog.51cto.com/douya/1596113,如需转载请自行联系原作者