|
环境: 主从服务器上的MySQL数据库版本同为5.1.34 主机IP:192.168.0.1 从机IP:192.168.0.2 一. MySQL主服务器配置 1.编辑配置文件/etc/my.cnf # 确保有如下行 server-id = 1 log-bin=mysql-bin binlog-do-db=mysql #需要备份的数据库名,如果备份多个数据库,重复设置这个选项即可 binlog-ignore-db=mysql #不需要备份的数据库名,如果备份多个数据库,重复设置这个选项即可 log-slave-updates #这个参数一定要加上,否则不会给更新的记录些到二进制文件里 slave-skip-errors #是跳过错误,继续执行复制操作 2.建立用户 mysql> grant replication slave on *.* to slave@192.168.0.2 identified by ‘111111′; # grant replication slave on *.* to ‘用户名'@'主机' identified by ‘密码'; # 可在Slave上做连接测试: mysql -h 192.168.0.1 -u test -p 3.锁主库表 mysql> FLUSH TABLES WITH READ LOCK; 4.显示主库信息 记录File和Position,从库设置将会用到 ===================== mysql> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_do_db | Binlog_ignore_db | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 106 | | | +------------------+----------+--------------+------------------+ 5.另开一个终端,打包主库 cd /usr/local/mysql #mysql库目录 tar zcvf var.tar.gz var ============================ 二.MySQL从服务器配置 1、传输拿到主库数据包、解包 # cd /usr/local/mysql # scp 192.168.0.1:/usr/local/mysql/var.tar.gz . # tar zxvf var.tar.gz 2、查看修改var文件夹权限 # chown -R mysql:mysql var 3.编辑 /etc/my.cnf server-id=2 log-bin=mysql-bin master-host=192.168.0.1 master-user=slave master-password=111111 master-port=3306 replicate-do-db=test #需要备份的数据库名 replicate-ignore-db=mysql #忽略的数据库 master-connect-retry=60 #如果从服务器发现主服务器断掉,重新连接的时间差(秒) log-slave-updates #这个参数一定要加上,否则不会给更新的记录些到二进制文件里 slave-skip-errors #是跳过错误,继续执行复制操作 4、验证连接MASTER # mysql -h192.168.0.1 -uslave -ppassword mysql> show grants for slave@192.168.0.2; 5、在SLAVE上设置同步 设置连接MASTER MASTER_LOG_FILE为主库的File,MASTER_LOG_POS为主库的Position ============================ mysql> slave stop; mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.1',MASTER_USER='slave',MASTER_PASSWORD='111111',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=106; 6、启动SLAVE服务 mysql> slave start; 7、查看SLAVE状态 mysql> SHOW SLAVE STATUSG; 其中 Slave_IO_Running 和 Slave_SQL_Running 两列的值都为 "Yes",表明 Slave 的 I/O 和 SQL 线程都在正常运行。 8、解锁主库表 mysql> UNLOCK TABLES; 到此主从库搭建成功。可以在主库上插入数据测试同步是否正常。 -------------------------- 附:一些错误信息的处理,主从服务器上的命令,及状态信息。 在从服务器上使用show slave statusG Slave_IO_Running,为No, 则说明IO_THREAD没有启动,请执行start slave io_thread Slave_SQL_Running为No 则复制出错,查看Last_error字段排除错误后执行start slave sql_thread 查看Slave_IO_State字段空 //复制没有启动 Connecting to master//没有连接上master Waiting for master to send event//已经连上 主服务器上的相关命令: show master status show slave hostsshow logsshow binlog eventspurge logs to 'log_name'purge logs before 'date'reset master(老版本flush master)set sql_log_bin= 从服务器上的相关命令: slave startslave stop SLAVE STOP IO_THREAD //此线程把master段的日志写到本地 SLAVE start IO_THREAD SLAVE STOP SQL_THREAD //此线程把写到本地的日志应用于数据库 SLAVE start SQL_THREAD reset slave SET GLOBAL SQL_SLAVE_SKIP_COUNTER load data from master show slave status(SUPER,REPLICATION CLIENT) CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=,MASTER_USER=, MASTER_PASSWORD= //动态改变master信息 PURGE MASTER [before 'date'] 删除master端已同步过的日志 6.3.1 Master 同步线程状态 以下列出了master的 Binlog Dump 线程 State 字段中最常见的几种状态。如果在master上没有 Binlog Dump 线程,那么同步就没有在运行。 也就是说,没有slave连接上来。 Sending binlog event to slave 事件是由二进制日志构成,一个事件通常由更新语句加上其他信息。线程读取到一个事件并正发送到slave上。 Finished reading one binlog; switching to next binlog 读取完了一个二进制日志,正切换到下一个。 Has sent all binlog to slave; waiting for binlog to be updated 已经读取完全部未完成更新日志,并且全部都发送到slave了。它处于空闲状态,正等待在master上执行新的更新操作以在二进制日志中产生新 的事件,然后读取它们。 Waiting to finalize termination 当前线程停止了,这个时间很短。 6.3.2 Slave的I/O线程状态 以下列出了slave的I/O线程 State 字段中最常见的几种状态。从MySQL 4.1.1开始,这个状态在执行 SHOW SLAVE STATUS 语句结果的 Slave_IO_State 字段也会出现。这意味着可以只执行 SHOW SLAVE STATUS 语句就能了解到更多的信息。 Connecting to master 该线程证尝试连接到master上。 Checking master version 确定连接到master后出现的一个短暂的状态。 Registering slave on master 确定连接到master后出现的一个短暂的状态。 Requesting binlog dump 确定连接到master后出现的一个短暂的状态。该线程向master发送一个请求,告诉它要请求的二进制文件以及开始位置。 Waiting to reconnect after a failed binlog dump request 如果二进制日志转储(binary log dump)请求失败了(由于连接断开),该线程在休眠时进入这个状态,并定期重连。重连的时间间隔由 -- master-connect-retry 选项来指定。 Reconnecting after a failed |