简单的一个完整 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库