MySql主从配置实践及其优势浅谈
1、增加两个MySQL,我将C:\xampp\mysql下的MYSQL复制了一份,放到D:\Mysql2\Mysql5.1
修改my.ini(linux下应该是my.cnf) :
[client]
port = 3307
[mysqld]
port = 3307
basedir=D:/Mysql2/Mysql5.1/mysql
datadir=D:/Mysql2/Mysql5.1/mysql/data/
之后,再增加MySQL2服务,
mysqld –install MySQL2 --defaults-file=D:\Mysql2\Mysql5.1\mysql\my.ini(需要管理员权限,否则会被无情拒绝)
另一个MySQL将端口号设置为3308 服务名为MySQL1(打算用做从数据库)
2、新建了一个test数据库,新建一张twenty_million表(id,name,value) 往里面插入2000W条数据(5min)
3、主从数据库同步配置, 如果不是同一个台服务器上的需要设置权限用户给它。
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave001'@'192.168.0.99' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.13 sec)
因为我的是一台机器上进行测试,所以直接用root用户了,密码123
修改主数据库的配置文件,my.ini,开启BINLOG,并设置server-id的值,修改之后必须重启Mysql2服务:
[mysqld]
log-bin=D:/Mysql2/Mysql5.1/mysql/log/mysql-bin.log
server-id=1
之后可以得到主服务器当前二进制日志名和偏移量,这个操作的目的是为了在从数据库启动后,从这个点开始进行数据的恢复
接下来停止主数据的更新操作,并生成数据库的备份,可以通过mysqldump到从数据库,当然也可以直接用cp命令将数据文件复制到从数据库中去(1%拷了384秒,情何以堪?我还不如重新插一遍测试数据呢,果断掐了)
也算学个命令,其实完全可以用navicate里的导出数据库再导入数据库
进行从数据库的配置:
修改my,ini(my.cnf)
[mysqld]
server-id=2
log_bin = /var/log/mysql/mysql-bin.log
master-host =192.168.1.100(本机的话:127.0.0.1//localhost是它的别名!)
master-user=test
master-pass=123456
master-port =3306
master-connect-retry=60
replicate-do-db =test
但是,我一直都无法启动,晚上搞了很久也没搞出个所以然来,最后只能添加错误日志
log-error=D:/Mysql1/Mysql5.1/mysql/log/mysql-bin.log
net start mysql1
日志截图
继续度娘的干活:
然后我就想知道自己的mysql版本,进入cmd:
我次奥,我一直以为我的mysql是5.1啊.知道了问题原因,解决也比较容易
在从数据库的my.ini中只需要添加两项:
server-id = 2
replicate-do-db = mydatabase
之后再在cmd下:
mysql> change master to master_host='127.0.0.1',master_user='root',master_password='123',master_log_file='mysql-bin.000001',master_log_pos=60, master_port=3307;
其中master_log_file和master_log_pos通过在主数据库show master status;得到。
端口不是默认端口的话,如master_port=3307,不要加引号。
接下来就是重启服务,先启动主数据库服务(我的是mysql2),再启动从数据库服务,然后就算完成了主从配置,在主数据库中更改test数据库中数据,理论上,在从数据库中也会做相应的更改
当然这是理论上的,实际上,我特么又出问题了,从数据库中的数据并没有按照理论上做出相应的更改,我仔细看了下show slave stats\G和别人成功的截图对比下,其中slave_IO_Running这项,我的是NO人家的是YES,目测是这个问题,查看log日志
找不到…..log file name inXXXXXX 继续度娘:http://hi.baidu.com/zhanglp/item/9bd563e186b4b918585dd8ba找到答案以及解决办法
在主数据库中
再更改从数据库(建议开两个CMD,我之前一直都是一个CMD,exit cd麻烦死)
再
搞定,测试,成功!
4、最后总要说说它的实际作用的么,在我百度之前,我在想,这不就是数据库的实时备份么,也没什么大不了的,这样的想法,只能说明自己对数据库读写压力完全不了解。
在MySQL数据库中,支持单项、异步复制。在复制过程中,一个服务器充当主服务器,而另外一台服务器充当从服务器。如下图所示。此时主服务器会将更新信息写入到一个特定的二进制文件中。并会维护文件的一个索引用来跟踪日志循环。这个日志可以记录并发送到从服务器的更新中去。当一台从服务器连接到主服务器时,从服务器会通知主服器从服务器的日志文件中读取最后一次成功更新的位置。然后从服务器会接收从那个时刻起发生的任何更新,然后锁住并等到主服务器通知新的更新。
好处一:实现服务器负载均衡
即可以通过在主服务器和从服务器之间切分处理客户查询的负荷,从而得到更好的客户相应时间。通常情况下,数据库管理员会有两种思路。
一是在主服务器上只实现数据的更新操作。包括数据记录的更新、删除、新建等等作业。而不关心数据的查询作业。数据库管理员将数据的查询请求全部 转发到从服务器中。这在某些应用中会比较有用。如某些应用,像基金净值预测的网站。其数据的更新都是有管理员更新的,即更新的用户比较少。而查询的用户数 量会非常的多。此时就可以设置一台主服务器,专门用来数据的更新。同时设置多台从服务器,用来负责用户信息的查询
二是在主服务器上与从服务器切分查询的作业。在这种思路下,主服务器不单单要完成数据的更新、删除、插入等作业,同时也需要负担一部分查询作业。而从服务器的话,只负责数据的查询。当主服务器比较忙时,部分查询请求会自动发送到从服务器重,以降低主服务器的工作负荷。
好处二:通过复制实现数据的异地备份
如上图所示,可以定期的将数据从主服务器上复制到从服务器上,这无疑是先了数据的异地备份。在传统的备份*下,是将数据备份在本地。此时备份 作业与数据库服务器运行在同一台设备上,当备份作业运行时就会影响到服务器的正常运行。有时候会明显的降低服务器的性能。同时,将备份数据存放在本地,也 不是很安全。如硬盘因为电压等原因被损坏或者服务器被失窃,此时由于备份文件仍然存放在硬盘上,数据库管理员无法使用备份文件来恢复数据。这显然会给企业 带来比较大的损失。
好处三:提高数据库系统的可用性
数据库复制功能实现了主服务器与从服务器之间数据的同步,增加了数据库系统的可用性。当主服务器出现问题时,数据库管理员可以马上让从服务器作为主服务器,用来数据的更新与查询服务。然后回过头来再仔细的检查主服务器的问题。此时一般数据库管理员也会采用两种手段。
一是主服务器故障之后,虽然从服务器取代了主服务器的位置,但是对于主服务器可以采取的操作仍然做了一些限制。如仍然只能够进行数据的查询,而 不能够进行数据的更新、删除等操作。这主要是从数据的安全性考虑。如现在一些银行系统的升级,在升级的过程中,只能够查询余额而不能够取钱。这是同样的道 理。
二是从服务器真正变成了主服务器。当从服务器切换为主服务器之后,其地位完全与原先的主服务器相同。此时可以实现对数据的查询、更新、删除等操 作。为此就需要做好数据的安全性工作。即数据的安全策略,要与原先的主服务器完全相同。否则的话,就可能会留下一定的安全隐患