三、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 on
2012-09-16 22:42
X海阳
阅读(130)
评论(0)
编辑
收藏