windows 创建mysql服务器 搭建mysql服务器
服务端:xuegod63.cn IP:192.168.10.63
客户端:xuegod64.cn IP:192.168.10.64
mysql 主从复制
mysql主从复制概述:
复制解决的基本问题是让一台服务器的数据和另外的服务器保持同步。
一台主服务器可以连接多台从服务器,并且从服务器也可以反过来作主服务器。
主服务器和从服务器可以位于不同的网络拓扑中,还能对整台服务器、特定的数据库,甚至特定的表进行复制。
主从服务器的版本必须一致。
如果主从版本不一致时,谁的版本应该高一些?
主服务器版本可以低一些的,从服务器版本要高一些。
1.2 . 复制解决的问题
MySQL复制技术有以下一些特点:
(1) 数据分布 (Data distribution )
(2) 负载平衡(load balancing)
(3) 备份(Backups)
(4) 高可用性和故障转移 High availability and failover
1.3 复制如何工作
整体上来说,复制有3个步骤:
(1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
(2) slave将master的binary log events拷贝到它的中继日志(relay log);
(3) slave重做中继日志中的事件,修改salve上的数据。
mysql主从复制中:
第一步:master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。
第二步:slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经执行完master产生的所有文件,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。
第三步:SQL slave thread(SQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重新执行其中的事件而更新slave的数据,使其与master中的数据一致。
模式: C/S 模式
端口:3306
实战:实战mysql主从配备
xuegod63 主mysql服务器配置
安装数据库: [root@xuegod63 ~]# yum install mysql-server -y [root@xuegod63 ~]# service mysqld start 创建要同步的数据库: [root@xuegod63 ~]# mysql -h 127.0.0.1 -u root -p #连接数据库 或: [root@xuegod63 ~]# mysql mysql> create database cd; mysql> use cd; mysql> create table test1 (id int); 字段名 数据类型 mysql> show tables; 停止mysql主服务 [root@xuegod63 ~]# service mysqld stop配置mysql主要同步的数据库名字并开启对应的二进制日志
#vim /etc/my.cnf # my.cnf 是mysql 主配置文件 [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 #在原配置文件中,添加以下内容: log-bin=mysqllog server-id=1 binlog-do-db=cd
注释:
log-bin=mysqllog #启用二进制日志,默认存在/var/lib/mysql 下面
server-id=1 #本机数据库ID 唯一标示。
binlog-do-db=cd #可以被从服务器复制的库。二进制需要同步的数据库名
# binlog-ignore-db=mk2 不可以被从服务器复制的库
重新启动
[root@xuegod63 ~]# service mysqld restart授权
mysql> grant replication slave on *.* to [email protected] identified by "123456"; 在从xuegod64上测试登录: [root@xuegod64 ~]# mysql -h 192.168.10.63 -u slave -p123456复制前保证主从两个数据库数据一致:
把主的原始数据传给从:
例:导出所有数据库:
[root@xuegod63 ~]# mysqldump -u root -p -A > all1.sql 参数:-A, --all-databases Dump all the databases.[root@xuegod63 /]# vim all.sql #查看sql语句,导入数据时,会自动创建对应的数据库
数据库复制到xuegod64上:
方法1:scp all1.sql 192.168.10.64:/root 在mysql从服务器xuegod64上导入: [root@xuegod64 ~]# yum install mysql-server -y 安装 [root@xuegod64 ~]# service mysqld start [root@xuegod64 ~]# mysql -u root -p < all1.sql #导入数据库,和主服务器保持一致 Enter password: [root@xuegod64 ~]# mysql mysql> show databases; mysql> use cd; mysql> show tables;修改从服务器配置文件:
[root@xuegod64 ~]# vim /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0#在配置文件中写入以下内容
server-id=2 #从服务器ID号,不要和主ID相同 ,如果设置多个从服务器,每个从服务器必须有一个唯一的server-id值,必须与主服务器的以及其它从服务器的不相同。可以认为server-id值类似于IP地址:这些ID值能唯一识别复制服务器群集中的每个服务器实例。
master-host=192.168.10.63 #指定主服务器IP地址
master-user=slave #指定在主服务器上可以进行同步的用户名
master-password=123456 #密码
####以下可以不写
master-port = 3306 #同步所用的端口
master-connect-retry=60 #断点重新连接时间
保存,重启
#service mysqld restart
测试:
主服务器上查看:
mysql> show master status; ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 2 Current database: mk1 +-----------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +-----------------+----------+--------------+------------------+ | mysqllog.000004 | 106 | mk1 | | 从服务器上查看: mysql> show slave status \G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.1.63 Master_User: slave Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysqllog.000001 Read_Master_Log_Pos: 315 Relay_Log_File: mysqld-relay-bin.000002 Relay_Log_Pos: 459 Relay_Master_Log_File: mysqllog.000001 Slave_IO_Running: Yes #可以看到这两个Yes,说明从服务器安装成功。 Slave_SQL_Running: YesSlave_IO_Running :一个负责与主机的io通信
Slave_SQL_Running:负责自己的slave mysql进程
测试:数据同步
xuegod63写数据: mysql> use cd; Database changed mysql> show tables; +--------------+ | Tables_in_cd +--------------+ | test1 | +--------------+ 1 row in set (0.00 sec) mysql> insert into test1 values(1);xuegod64读数据:
mysql> use cd; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> select * from test1; +------+ | id | +------+ | 1 | +------+排错:
同步之前如果怀疑主从数据不同步可以采取:上面冷备份远程拷贝法或者在从服务器上命行同步方法。
实战2:mysql 主主 双向主从复制
实战3:mysql 主从读写分离