格式约定:
灰色底黑色加粗:为输入的系统命令部分
灰色底:输入的系统命令返回的信息或者配置文件文本信息
×××底:技巧或需要注意的注释信息
粉色底:需特别注意的地方
蓝色字体:内容注释
目录
1.mysql主从同步配置
1.1配置主库
1.2备份sql语句
1.3配置从库
1.4验证主从同步
1.5主从同步在web中的应用
2.mysql主从同步常见故障
2.1错误的主库地址
2.2 bin log文件名错误
2.3错误的主库IP地址
2.4连接主库的端口错误
2.5 binlog文件备份问题
2.6查看slave端sql进程未启动
1.1配置主库
①锁表备份
mysql> flush tables with read only;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'only' at line 1
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)
1.1.操作主库
①建立测试库,授权用来给从库做备份用的用户
mysql> create database user;
Query OK, 1 row affected (0.00 sec)
mysql> grant replication slave on *.* to 'rep'@'192.168.2.%' identified by '123';
Query OK, 0 rows affected (0.00 sec)
②锁表
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)
③查看mysql的binlog文件名称和位置点(配置从库的时候要用)
mysql> show master status;
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
| mysql-bin.000001 | 605 | | |
1 row in set (0.00 sec)
④解锁对外提供服务
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
1.2备份sql语句
[root@MYSQL ~]# mysqldump -uroot -S /data/3306/mysql.sock -A -B |gzip > /tmp/zhu.sql.gz
[root@MYSQL ~]# ll /tmp/
-rw-r--r-- 1 root root 136543 Sep 17 20:25 zhu.sql.gz
1.3查看主库的binlog 文件和位置点是否发生变化(如果变了就可能是在此期间我们执行了操作,备份的语句可能不全)
①备份sql语句前binlog和位置点
mysql> show master status;
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
| mysql-bin.000001 | 605 | | |
1 row in set (0.00 sec)
②备份sql语句后的binlog和位置点
mysql> system date;
Mon Sep 17 20:26:00 CST 2012
mysql> show master status;
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
| mysql-bin.000001 | 605 | | |
1 row in set (0.00 sec)
没有发送变化,证明我们备份的sql语句可以满足需求
1.3配置从库
①查看从库上的数据库
mysql> show databases;
| Database
| information_schema
| mysql
| test
| user123
②将主库的sql语句导入从库
[root@MYSQL tmp]# gzip -d zhu.sql.gz
[root@MYSQL tmp]# ll
-rw-r--r-- 1 root root 501896 Sep 17 20:25 zhu.sql
[root@MYSQL tmp]# mysql -uroot -S /data/3307/mysql.sock <zhu.sql
③验证从库导入的sql语句.从库上的数据库
mysql> show databases;
| Database
| information_schema
| mysql
| test
| user123
主库上的数据库
mysql> show databases;
| Database
| information_schema
| mysql
| test
| user123
验证完成,与主库一致
④设置从库同步主库
mysql> change master to
-> MASTER_HOST='192.168.2.5',
-> MASTER_PORT=3306,
-> MASTER_USER='rep',
-> MASTER_PASSWORD='123',
-> MASTER_LOG_FILE='mysql-bin.000001',
-> MASTER_LOG_POS=605;
Query OK, 0 rows affected (0.08 sec)
MASTER_HOST 主库的IP地址
MASTER_PORT 主库的端口
MASTER_USER 同步用的用户
MASTER_PASSWORD 同步用户的密码
MASTER_LOG_FILE binlog文件的文件名
MASTER_LOG_POS binlog 文件的位置点
信息来源
前面步骤里的操作
用户名和密码
mysql> grant replication slave on *.* to 'rep'@'192.168.2.%' identified by '123';
Query OK, 0 rows affected (0.00 sec)
查看Binlog和位置点
mysql> show master status;
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
| mysql-bin.000001 | 605 | | |
⑤开启从库功能
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
⑥查看从库
[root@MYSQL tmp]# mysql -uroot -S /data/3307/mysql.sock -e "show slave status\G"|grep Slave
Slave_IO_State: Waiting for master to send event
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
当
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
出现两歌YES的时候,则证明主从配置成功
需要注意的选项
Seconds_Behind_Master: 0
表示与主库的延迟
1.4 验证主从同步
主库建表测试
mysql> system date
Mon Sep 17 23:26:02 CST 2012
mysql> create database zhucong;
Query OK, 1 row affected (0.00 sec)
从库验证
mysql> show databases;
| Database
| information_schema
| mysql
| test
| user
| user123
| zhucong
6 rows in set (0.00 sec)
1.5主从库提供web服务权限设置
主库权限设置
主库权限设置
GRANT SELECT, INSERT, UPDATE, DELETE ON `blog`.* TO 'blog'@'10.0.0.%' identified by 'oldboy456';
从库权限设置
GRANT SELECT ON `blog`.* TO 'blog'@'10.0.0.%' identified by 'oldboy456';
生产环境读写分离设置建议
给开发人员的读写分离用户设置
主库(尽量提供写服务):www wirte ip:10.0.0.179 port 3306
从库(仅提供读服务): www read ip:10.0.0.180 port 3306
提示:除了IP没办法修改之外,我们尽量为开发人员提供方便。