主从复制目的:能够作数据库的实时备份,保证数据的完整性;可作读写分离,主服务器只管写,从服务器只管读,这样能够提高总体性能。 node
1.安装部署mysql 5.5(rpm、源码) mysql
软件下载: web
http://dev.mysql.com/downloads/mysql/#downloads sql
检查库文件是否存在,若有删除。
[root@localhost Desktop]$ rpm -qa | grep mysql
mysql-libs-5.1.52-1.el6_0.1.x86_64 数据库
[root@localhost ~]# rpm -e mysql-libs-5.1.52.x86_64 –nodeps vim
命令以下:
#rpm -ivh MySQL-server-5.5.30-1.el6.x86_64.rpm
#rpm -ivh MySQL-client-5.5.30-1.el6.x86_64.rpm
#rpm -ivh MySQL-devel-5.5.30-1.el6.x86_64.rpm 服务器
/usr/bin/mysql_install_db --user=mysql 初始表 ide
#service mysql start性能
更改配置文件:orm
主 [root@server ~]# egrep "log-bin|server-id" /etc/my.cnf
server-id = 111
log-bin-index=mysql-bin.index
从 [root@server ~]# egrep "log-bin|server-id" /etc/my.cnf
log-bin=mysql-bin
server-id=222
#show variables like 'log_bin
+-----------------------+--------+ | Variable_name | Value | +-----------------------+--------+ | log_bin | ON | # ON 为开始开启成功 +-----------------------+--------+
3.创建用于从库复制的帐号rep
mysql> grant replication slave on *.* to 'rep'@'192.168.0.%' identified by 'C#ssw0rd'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) # 检查建立的rep帐号: mysql> select user,host from mysql.user;
把主库现有数据备份下来,再恢复到从库,此时两个主机的数据一致。
若是事先有数据的话,这不不能忘。
在主库上加锁,使只有只读权限。 mysql> flush table with read lock;
记住就是这个点备份的。
show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000006 | 750 | wuzy |
主 mysqldump -uroot -p -hlocalhost --all-databases> mysql1.bak.sql 导出 或者若是数据量比较大,直接拷贝原始数据文件比使用mysqldump更加有效,也省去了执行insert语句更新索引的开销。
解锁库:
mysql> unlock tables;
从 mysql -uroot -p </tmp/mysql1.bak.sql 导入
更改从属服务器用于与主服务器进行链接和通信的参数。 mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.203', MASTER_PORT=3306, MASTER_USER='rep', MASTER_PASSWORD='C#ssw0rd', MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=750;
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Connecting to master
Master_Host: 192.168.0.203
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000005
Read_Master_Log_Pos: 948
Relay_Log_File: server-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: mysql-bin.000005
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes
忽略MySQL主从复制受权表同步,读写分离
[root@bogon 3306]# vim my.cnf #添加如下四行 replicate-ignore-db = mysql binlog-ignore-db = mysql binlog-ignore-db = performance_schema binlog-ignore-db = information_schema
1) 经过read-only参数防止数据写入从库的方法。 #修改配置文件。 vim my.cnf [mysqld] read-only #对用户受权事不能指定有super或all privileges权限。否则没效果。 #建立帐户wuzy,并刷新权限。 mysql> grant select,insert,update,delete on *.* to 'wuzy'@'localhost' identified by 'P!ssw0rd'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) 2) 从库开启bin-log vim my.cnf log-bin = mysql-bin log-slave-updates #表示从库记录bin-log expire_logs_days = 7 #保留7天bin-log。