mysql主从复制设置

三、mysql复制 master和每个slave是通过unique ID来区分的(server-id选项),而且每个slave需要配置好master的主机名,日志文件名,和日志位置 这些可以通过在slave会话中使用命令CHANGE MASTER TO ,存储在slave的master.info文件中 --begin 1.在master上启用二进制日志,并且指定唯一的server ID,复制服务器群必须使用唯一的server ID来标识,在1~2^32 -1 为了innodb事务处理的最大程度的一致性、持久性,需在master配置innodb_flush_log_at_trx_commit=1和sync_binlog=1 master上不应该开启skip-networking选项,开启的话slave将没法与master通信 2.修改slave配置的server-id,该id不能与master冲突,设置之后需要重启,如果设置多个slave则每一个server-id必须唯一 3.创建拥有REPLICATION SLAVE权限的帐户给slave复制用 create user 'rep102'@'192.168.1.%' identified by '123456'; grant replication slave on *.* to 'rep102'@'192.168.1.%'; //ip为通配符确定的 4.指定slave从某个节点开始复制 在一个master会话中刷新所有表和堵塞的写操作:FLUSH TABLES WITH READ LOCK; 在另一个master会话中,使用SHOW MASTER STATUS来看当前的binlog文件名及位置,file 和 position mysql-bin.000046 344 1)使用mysqldump为当前master创建快照 先在一个会话中使用 :FLUSH TABLES WITH READ LOCK; 再在另一个会话中dump:mysqldump --all-databases --lock-all-tables >dbdump.db 再解锁: UNLOCK TABLES; 2)使用冷备份:copy文件 一致性最高时需要shutdown mysqladmin shutdown tar cf /tmp/db.tar ./data rsync --recursive ./data /tmp/dbdata restart 5.设置master-slave: 1)新的master-slave,没有任何数据 拿到binlog文件和位置后,执行CHANGE MASTER TO 2)在现在数据基础上设置主从 在master创建帐号给从库使用 配置主库server-id 创建主库快照 得到主库的binlog位置 更新从库配置 为从库加载数据:mysqldump的(以--skip-slave-start参数启动,导入数据mysql < db.dump),冷备的(tar xvf dump.tar,使用--skip-slave-start启动) 使用主库的binlog位置配置从库,使用正确的帐号 开启slave进程 当slave开始复制时可在数据目录下发现一个master.info文件和一个relay-log.info文件 3)在一个现在的主从系列中添加从库 复制已有的从库:mysqladmin shutdown; 复制数据文件到新的slave; 可能会报relay-log错误,使用与已有slave一样的--relay-log避免错误,如果它没指定则使用exist_slave_hostname-relay-bin 如果上面方法不行则把已有的slave的relay log索引文件拷到新slave,设置--relay-log-index选项与原slave相同,默认为exist_slave_hotname-relay-bin.index 如果新的slave目录里没有,将已有slave的master.info和relay-log.info文件拷进去,这两个文件包含目前同步的master binlog位置和slave的延迟 开启已有的slave 为新的slave分配server-id并启动它,新的slave将使用master.info文件开始同步 4)在slave上设置master的配置 此处需要主库的防火墙开放3306端口: sudo /sbin/iptables -A INPUT -p tcp --dport 3306 -j ACCEPT sudo /sbin/iptables -A OUTPUT -p tcp --dport 3306 -j ACCEPT sudo /sbin/service iptables save sudo /sbin/service iptables restart sudo /sbin/iptables -L -n 查看3306端口已打开 CHANGE MASTER TO MASTER_HOST='192.168.1.101', MASTER_USER='rep', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000046', MASTER_LOG_POS=344; start slave; show slave status; Slave_IO_State: Waiting for master to send event Master_Host: 192.168.1.101 Master_User: rep Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000048 Read_Master_Log_Pos: 2332 Relay_Log_File: web102-relay-bin.000005 Relay_Log_Pos: 2478 Relay_Master_Log_File: mysql-bin.000048 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 2332 Relay_Log_Space: 3528 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 101 看到这个状态就知道,主从复制成功搭建,接下来就是看同步效果咯 四、mysql用户权限 1.创建帐户(使用grant语句或直接操作授权表) create 'user'@'host' idetified by 'password'; grant all privileges on *.* to 'user'@'host' identified by 'password' with grant option; GRANT USAGE ON *.* TO 'francis'@'localhost' WITH MAX_QUERIES_PER_HOUR 100; //限制查询 2.修改密码 mysqladmin -u user_name -h host_name password "newpwd" set password for 'user'@'%' = password('newpwd'); root可以直接更新密码:set password = password('newpwd'); grant usage on *.* to 'user'@'%' identified by 'newpwd'; //指定某个帐户的密码而不影响帐户当前的权限 3.flush previliges;
posted @ 2012-09-16 22:42  X海阳  阅读(207)  评论(0编辑  收藏  举报