在新的主与从之间建立复制:
1. 配置主服务器中的配置文件my.cnf,二进制日志文件和服务器ID
[mysqld]
log-bin=mysql-bin ###最好与数据文件分离
server-id=1
2. 开启主服务器
3. 建立用于连接主服务器的用户
CREATE USER 'repl'@'%.mydomain.com' IDENTIFIED BY '密码';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.mydomain.com';
4. 得到主服务器的状态信息
mysql> flush tables with read lock
mysql> show master status;
5. 在主服务器上,释放读锁
mysql> unlock tables;
6. 配置从服务器中的配置文件my.cnf,服务器ID
[mysqld]
server-id=2
7. 开启从服务器
8. 在从服务器上设置主配置
mysql> CHANGE MASTER TO
-> MASTER_HOST='主服务器IP',
-> MASTER_USER='用户名',
-> MASTER_PASSWORD='密码',
-> MASTER_LOG_FILE='当前的二进制日志文件',
-> MASTER_LOG_POS=2063;
MySQL使用3个线程进行复制:
一个在主服务器上
Binlog dump thread 当从服务器连接主服务器时,主服务器创造了一个线程,发送二进制日志内容到从服务器。使用SHOW PROCESSLIST,可以识别这个线程
两个在从服务器上
Slave I/O thread 当在从服务器上执行START SLAVE时,从服务器创造了这个线程,连接上主服务器,请求主服务器传送更新的二进制日志,然后读取复制到从服务器上面形成中继日志。使用SHOW SLAVE STATUS\G,可以看到Slave_IO_running
Slave SQL thread 从服务器创造了这个线程,从中继日志里读取执行事件
问题:slave stop
set global sql_slave_skip_counter=1
slave start
主主复制:
auto-increment-increment #增长量#
auto-incremnet-offset #起始值#
开启crash-safe功能
relay_log_info_repository=TABLE
relay_log_recovery=ON
主上:
sync_binlog = 1
innodb_flush_log_at_trx_commit = 1
innodb_support_xa = 1
如何阻止主更新直到从跟上:
1.在主上执行
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
2.在从上执行
mysql> SELECT MASTER_POS_WAIT('log_name', log_pos);
3.在主上执行
mysql> UNLOCK TABLES;