MySQL 用户授权和bin-log日志和主从复制、读写分离(1)

前言:

MySQL数据库现在用的越来越牛逼了,但是,性能这一块出了很大的问题,如果一张表有几千万甚至几亿的数据的话,那么就会很缓慢。如果有连表的话,那就慢的想骂街了。

所以,这个时候,读写分离出现了。


准确的说就是,把读操作和写操作分来,因为,慢,主要是读很慢,也就是select 很慢。


用两台一模一样的MySQL数据库服务器。一台我们称作master,主服务器;一台我们称作slave,从服务器。然后,数据都往master里写,然后同步到slave里面;再所有的查询就从slave 里面。这样。就形成了读写分离,速度加快了很多。


1. 先说说虚拟机VW 和Ubuntu系统

一般个人学习的话,肯定是虚拟机上面安装Linux系统的,我个人比较喜欢Ubuntu,大小700多M,而且对于新手来说安装软件很爽,apt-get install xxxx,就搞定了,

所以,这次也是在Ubuntu上完成的。

一,安装Ubuntu操作系统

因为我是笔记本,用的无线网,没有网线,所以网络选择VMnet8 ,选择软件的时候,全部勾选开发软件,下一步,默认自动分区,安装完成,称作master服务器

然后clone 一台,称作slave 服务器。也是网卡模式选择VMnet8。

这样两台虚拟机和本机win7就可以通讯了,不过本机的ip是VM net8 的,如图:

这样,三台机器就可以互通了,本机win7 192。168.15.1 ,master 192.168.15.131,slave 192.168.15.133

二,安装Lamp环境

一些新手,比如我,对源代码安装Lamp安装不爽,安装很多遍,都不成功,特别是php。在Ubuntu里安装很爽了,一键安装。

tasksel:新德利软件包。

sudo tasksel install lamp-server

或者:

sudo tasksel

然后在tasksel界面中选LAMP-Server就OK了。

安装过程中会提示你输入mysql的root密码。

OK,安装完成了,现在你可以运行apache2来启动apache了,然后在浏览器里输入127.0.0.1,看看是不是已经显示测试页面了?

http://hi.baidu.com/yangyiphper/item/30bae2db358dddf954347f29

http://hi.baidu.com/yangyiphper/item/89bc6f35db195789b80c0329

三,Lamp的各个配置文件的路径

用tasksel 安装的都是默认安装的各个软件。所以,一定要搞清楚各个软件的安装目录。

1,PHP的web目录:/var/www/

2,php 的配置文件:/etc/php5/apache2/php.ini

看看截图:


/etc/php5/apache2/php.ini 是php web运行的配置文件,

/etc/php5/cli/php.ini 是php cli 方式运行的配置文件,命令行运行。

/etc/php5/conf.d/目录下是php的各个扩展的配置文件。


3. apache 的配置目录

/etc/apache2/apache2.conf


配置都是分开的,这里就不细说了。http://blog.csdn.net/jibcy/article/details/8060651

4 . MySQL 的配置目录

/etc/mysql/my.cnf 配置文件。

/var/lib/mysql/ datadir目录,需要root权限才能看

/var/log/mysql/ mysql 的bin-log日志和错误日志目录。

/usr/bin/mysql,、usr/bin/mysqlbinlog mysql的各个命令的目录。

四,Lamp 各个组件的重启命令

sudo /etc/init.d/mysql  restart  MySQL重启

sudo /etc/init.d/apache2  restart  Apache重启

sudo /etc/init.d/networking restart 网络重启


2. Mysql 用户授权

要做主从复制,就要先用户授权,因为,slave 服务器要从master 服务器的bin-log 数据同步,那么slave 就要能够登录master服务器。那么就要授权

mysql 数据库中用户授权命令:grant 关键字、

我们先登录master 服务器:192.168.15.131 。

yangyi@yangyi:~$ mysql -uroot -p123456 -h192.168.15.131
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.15.131' (111)
为什么出现这样的错误呢?192.168.15.131 可以本机的ip啊?这个ip为什么登陆不上?

后来百度说Ubuntu上面安装的mysql 为了安全,只允许ip 为127.0.0.1 的ip登录,我们试一试:


成功了!

那要怎么改一改呢:

vi /etc/mysql/my.cnf



将bin-address = 0.0.0.0  这样在本机就可以用任意ip 登录了。保存重启mysql 数据库。


然后我们再试一试:恩,成功了。用本机的ip 登录成功了。



将master和slave的mysq配置同时修改一下。将bin-address = 0.0.0.0 


一,用slave mysql服务器来登录master 服务器。

现在master 服务器可以用ip 登录了,那现在从slave 服务器去登陆一下master。

slave 的ip是192.168.15.133 。试一下

yangyi@yangyi:~$ mysql -uroot -p123456 -h192.168.15.131
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.15.131' (111)
登录不上,说明还没授权。


现在去master 服务器上去授权slave 的ip 

yangyi@yangyi:~$ mysql -uroot -p123456 -h192.168.15.131
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 71
Server version: 5.1.61-0ubuntu0.10.10.1-log (Ubuntu)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select user,host,password from mysql.user;
+------------------+-----------+-------------------------------------------+
| user             | host      | password                                  |
+------------------+-----------+-------------------------------------------+
| root             | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root             | yangyi    | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root             | 127.0.0.1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| debian-sys-maint | localhost | *36EACFFD831A44B49F2EBE61790385BF76F49337 |
| phpmyadmin       | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+------------------+-----------+-------------------------------------------+
5 rows in set (0.00 sec)

mysql数据库的user表是授权表,是可以登录数据库的授权用户,那么如何将slave 的ip 192.168.15.133 放进去呢?

这个时候就用到grant 关键字了,这个是专门用来授权的。

怎么用呢。

mysql> ? grant
这样可以看它的用法。

我们就不讲这么细了,直接来:

mysql> grant all on *.* to 'yangyi'@192.168.15.133 identified  by '123456';
Query OK, 0 rows affected (0.00 sec)


给slave 服务器192.168.15.133 的用户为yangyi,密码为123456 的用户授权。注意,用户名和密码要用单引号。grant all 表示所有的权限。这个以后讲

我们再看看user 表

mysql> select user,host,password from mysql.user;
+------------------+-----------+-------------------------------------------+
| user             | host      | password                                  |
+------------------+-----------+-------------------------------------------+
| root             | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root             | yangyi    | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root             | 127.0.0.1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| debian-sys-maint | localhost | *36EACFFD831A44B49F2EBE61790385BF76F49337 |
| yangyi           | 192.168.15.131 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+------------------+-----------+-------------------------------------------+
授权成功。


现在去slave 服务器192.168.15.133登录master试一试,看能不能登陆进去

yangyi@yangyi:~$ mysql -uyangyi -p123456 -h192.168.15.131
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 70
Server version: 5.1.61-0ubuntu0.10.10.1-log (Ubuntu)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

登录成功!


二,熟悉bin-log 日志

bin-log 日志对于数据同步,主从复制极为关键,这也是为什么要讲的原因。

1.开启bin_log 日志配置:vi /etc/mysql/my.cnf  92行,log_bin 开启,也就是把前面的#去掉,
  就可以从/var/log/mysql 看到mysql_bin.000000日志了。
 
 mysql>show variables like '%bin%';
看到log_bin ON  说明也是开启了。

mysql>flush logs;
从当前位置开始,生成一个新的mysql-bin日志,会自增变成mysql-bin.000011了。

show master status;
就可以看到最新的,或者最后的一个mysql-bin日志,也就是刚才的mysql-bin.000011了,position 从106开始的。


mysql>reset master
清空所有的mysql-bin 日志,进去var/log/mysql 里看,会发现其他的都没有了。只有mysql-bin.000001和
mysql-bin.index 这两个是mysql最基本的日志,清不掉的。


mysql>\s
查看mysql 状态


/usr/bin/mysqlbinlog --no-defaults mysql-000001.bin |more
会看见的增删改都会记录下来了。

恢复mysql数据
/usr/bin/mysqlbinlog --start-position='112'  --stop-position='554' --no-defaults mysql-000001.bin | mysql -uroot -p123456 test

2.查看mysql datadir ,可以vi /etc/mysql/my.cnf 46行。看出datadir=/var/lib/mysql。但是普
  通用户没有权限查看,切换到root用户就可以进入/var/lib/mysql目录下看了。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值