Mysql主从复制(master-slave)实际操作案例
在这一章节里,我们来了解下如何在Mysql中进行用户授权及主从复制
这里先来了解下Mysql主从复制的优点:
1、如果主服务器出现问题,可以快速切换到从服务器提供的服务
2、可以在从服务器上执行查询操作,降低主服务器的访问压力
3、可以在从服务器上执行备份,以避免备份期间影响主服务器的服务
注意一般只有更新不频繁的数据或者对实时性要求不高的数据可以通过从服务器查询,实时性要求高的数据仍然需要从主数据库获得
在这里我们首先得完成用户授权,目的是为了给从服务器有足够的权限来远程登入到主服务器的Mysql
在这里我假设
主服务器的IP为:192.168.10.1
从服务器的IP为:192.168.10.2
Mysqlgrant用户授权
查看Mysql的用户表
msyql>mysql-uroot-p123123; msyql>selectuser,host,passwordfrommysql.user;
结果如下:
+------------------+-----------+-------------------------------------------+ |user |host |password | +------------------+-----------+-------------------------------------------+ |root |localhost|*E56A114692FE0DE073F9A1DD68A00EEB9703F3F1| |root |127.0.0.1|*E56A114692FE0DE073F9A1DD68A00EEB9703F3F1| +------------------+-----------+-------------------------------------------+
从如上表中看以看出root用户只能从本机登入Mysql,也就是来自localhost或者127.0.0.1
现在来通过grant命令来添加授权用户
msyql>?grant //查看grant的详细用法 msyql>grantallon*.*touser1@192.168.10.2identifiedby"123456";//*.*=所有的数据库.所有的表 //或者 msyql>grantreplicationslaveon*.*to'user2'@'192.168.10.%'identifiedby"123456";//%代表通配符
通过了grant命令给予了来自192.168.10.2的用户user1权限,允许其远程登录,如下:
+------------------+--------------+-------------------------------------------+ |user |host |password | +------------------+--------------+-------------------------------------------+ |root |localhost |*E56A114692FE0DE073F9A1DD68A00EEB9703F3F1| |root |127.0.0.1 |*E56A114692FE0DE073F9A1DD68A00EEB9703F3F1| |user1 |192.168.10.2|*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9| |user2 |192.168.10.%|*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9| +------------------+--------------+-------------------------------------------+
此时就可以在192.168.10.2的机器上访问10.1的Mysql了,如下:
msyql>mysql-uuser1-p123456-h192.168.10.1;
Mysqlbin-log日志
开启bin-log二进制日志,它保存了所有增删改的操作,以便于数据恢复或同步
修改主服务器mysql配置文件:
shawn@Shawn:~$sudovi/etc/mysql/my.cnf; /**********my.cnf**********/ [mysqld] #开启慢查询日志,记录查询过长的sql语句,以便于优化 log_slow_queries =/var/log/mysql/mysql-slow.log #开启bin-log日志 log-bin =/var/log/msyql/mysql-bin.log
添加完成后重启Mysql服务
shawn@Shawn:~$sudo/etc/init.d/mysqlrestart
现在你可以通过如下命令来查看bin-log日志是否成功开启
mysql>showvariableslike"%log_%"; |log_bin |ON | |log_slow_queries |ON |
如果显示为ON,那么就可以在/var/log/mysql/文件夹看到mysql-bin.000001二进制文件
关于bin-log日志的相关操作:
mysql>flushlogs;
此时就会多一个最新的bin-log日志
mysql>showmasterstatus;
查看最后一个bin-log日志,如下:
+------------------+----------+--------------+------------------+ |File |Position|Binlog_Do_DB|Binlog_Ignore_DB| +------------------+----------+--------------+------------------+ |mysql-bin.000002| 107| | | +------------------+----------+--------------+------------------+ mysql>showmasterlogs;
查看所有bin-log日志,如下:
+------------------+-----------+ |Log_name |File_size| +------------------+-----------+ |mysql-bin.000001| 4340| |mysql-bin.000002| 107| +------------------+-----------+ mysql>resetmaster;
清空所有bin-log日志
shawn@Shawn:~$mysqlbinlog/var/log/mysql/mysql-bin.000001|more
查看bin-log日志内容
#如果有字符集问题的话可以执行: shawn@Shawn:~$mysqlbinlog--no-defaults/var/log/mysql/mysql-bin.000001
shawn@Shawn:~$mysqlbinlog/var/log/mysql/mysql-bin.000002|mysql-uroot-p123123test; 恢复mysql-bin.000002中所有的操作到test数据库中
shawn@Shawn:~$mysqlbinlog/var/log/mysql/mysql-bin.000002--start-position="193"--stop-position="398"|mysql-uroot-p123123test; 恢复mysql-bin.000002中指定的操作(position)到test数据库中