简单的一个完整 M-S 配置:


step1 

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:

在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:

制作一个master的完整备份,并执行prepare,用于slave的搭建、
#innobackupex --user=root --password=xxxx  /root/backup
#innobackupex  --use-memory=500m  --apply-log /root/backup/2014-10-10-/


step4:

将备份拷贝到slave,并放入数据文件目录
scp -r  /root/backup/2014-10-10-   /usr/local/mysql/data/
chwow -R mysql:msyql /usr/local/mysql/data/

step5

配置slave

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:

查看并记录二进制日志的position ID
in slave:
pwd  /usr/local/mysql/data/
cat xtrabackup_binlog_info
localhost.000001  120
或者在master上执行
show master status\G;

step7:

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:

start slave;
show  slave status\G;
如果这两显示yes,说明配置成功
slave_io_running :yes
slave_sql_running :yes


step9:

观察线程列表
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列可能会显示正在查询。


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库