php与mysql搭建网站(php手把手教你做网站)
1、本地安装多个数据库
前边有过介绍这里不再重复,安装完成以后可能会遇到安装以后不能启动的问题。
解决办法:
- 打开注册表(开始->运行->regedit);
- HKEY_LOCAL_MACHINE->SYSTEM->services;找到服务名称,取决于mysqld install mysql8,安装的时候使用的服务名称,我的是mysql8;
- 找到ImagePath,双击查看数值数据,后边的路径是否是安装mysql的使用的路径,D:\mysql-8.0.27-winx64\bin\mysqld mysql8,其中D:\mysql-8.0.27-winx64是我安装mysql8的路径;
图1 mysql安装多版本 不能启动
我使用了一个mysql5.7,还有2个mysql8进行测试。
2、环形主从
A->B->C->D->A
也就是每个服务器即是主数据库,又是从数据库,形成环状,首尾相接。
优点:可以方便更换主机,当A主数据库出了问题,可以把1号从数据库直接换为主数据库;
缺点:当其中一个从数据库出了问题,后边的链条就断开了,不能做到同步;
3、发散式主从
A->B,A->C,A->D
只有一个主数据库(A),其他的数据库(B、C、D)都是A的从数据库。
4、主从配置
1)主数据库配置(A)my.ini
[mysqld]
server-id=1
log-bin=D:\mysql2\log\mysql-bin
说明:
- server-id,相当于门牌,每个数据库是唯一的,不要发生重复;
- log-bin日志的存放位置,我这里是指定了位置;
如果是双向同步,A即是主也是从数据库,如下配置
[mysqld]
server-id=1
log-bin=D:\mysql2\log\mysql-bin
replicate-wild-do-table=master.np_web_copy
#上下2个是有空行的,测试,没有空行的时候同步失败了,
#根据自己需要来写,如果同步失败 又不提示错误,可以把2个加上空行试试
replicate-wild-do-table=master.np_web_tags
#replicate_wild_ignore_table= 忽视的表
说明:
- replicate-wild-do-table要同步的表;
- replicate_wild_ignore_table同步的时候忽视的表;
- 如果同步的表比较少,可以使用replicate-wild-do-table指定要同步的,反之如果同步的表格比较多,则应该是指定不同步的表;
- 可以看到我同步的是2个表,2个replicate-wild-do-table之间加了空白行;
- 配置完成以后数据库服务要重启;
在测试同步的时候开始replicate-wild-do-table是直接没有空白行写的,但是不提示错误,也不同步数据,后来加了空白行就可以同步了。
2)从数据库(B)配置my.ini
和上边主数据库配置是一样的,更改下server-id,log-bin就可以了。
server-id=3
log-bin=D:\mysql-8.0.27-winx64\log\master-bin
replicate-wild-do-table=master.np_web_copy
replicate-wild-do-table=master.np_web_tags
说明:
如果只是作为从库,log-bin不需要配置;
5、登陆主数据库,创建用户用于主从同步
1)登陆mysql
进入数据库安装目录bin文件夹,地址栏输入cmd
msyql -u root -p -P 3308
由于是本地安装多个数据库,肯定会涉及到使用不同端口
说明:root是用户名,p 后边是密码, 大写的P后边是端口
2)创建用户(主从同步)
mysql8以前的版本
grant replication slave on *.* to 'slave'@'127.0.0.1' identified by '123456';
mysql8
1、CREATE USER 'slave'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY '123456';
2、grant replication slave on *.* to 'slave'@'127.0.0.1';
flush privileges;
说明:
- 'slave'@'127.0.0.1'其中127.0.0.1从服务器IP,slave用户名,123456是密码,根据自己需要设置;
- 添加完成用户以后要刷新权限flush privileges;
6、cmd查看主数据库状态
1)锁表,防止在配置的时候日志发生改变,先锁起来,配置完成从数据库以后再解锁
flush tables with read lock;
2)查看主数据库状态
show master status;
图2 master状态
- 这里可以查看到file(slave-bin.000008),Position(156);
- 每个数据库这里都可能是不同的,根据自己电脑显示的信息记录下来;
7、登陆从数据库
1)如果以前有过配置,需要先停止同步。
stop slave;
2)设置输入以下代码
CHANGE MASTER TO MASTER_HOST='127.0.0.1',MASTER_PORT=3308,MASTER_USER='slave',MASTER_PASSWORD='123456',MASTER_LOG_FILE='slave-bin.000008',MASTER_LOG_POS=156;
说明:
- 127.0.0.1主服务器的IP;
- 3308是端口;
- slave是添加的用户账号;
- 123456用户密码;
- slave-bin.000008是查看主数据库状态得到的file;
- 156同5一样是查看状态得到的Position;
3)启动同步
start slave;
4)查看状态
show slave status \G
#如果只是show slave status;显示会很乱,使用上边的指令显示的会更加清晰一些;
图3 主从同步配置成功
出现图3显示说明配置成功
5)解锁主数据库
unlock tables;
问题1:Slave_IO_Running为no
查看change master to后边的参数是否正确;
问题2:Slave_SQL_Running: No
开始配置显示yes ,但是操作数据库以后显示为No,这是因为对从数据库进行了写操作;
同步过程中可能出现的问题:
- 1049 ,检查从数据库是否存在,例如要同步的是master数据库,从库中也要存在master;
- 1032,我查看日志是主库删除信息的时候,从库不存在该信息;
- 22.编码问题,当主库是mysql8,从库是5.7的时候出现了该问题;
以上2、3其实也不算是错误,对程序的执行没有影响,可以忽略跳过。
打开从数据库mysql.ini添加指令:
slave-skip-errors=22,1032
注意:如果数据库只是从数据库,不要对该数据库进行写操作,否则会出现Slave_SQL_Running: No为no的情况;
8、双向同步,数据库即做主库也做从库
需要重复以上步骤:
不必管已经设置好的主从,把B服务器作为主库,A服务器作为从库,重新设置一下主从就可以了。
9、查看日志
当同步失败的时候,查看从库的状态,
show slave status \G
得到错误信息
图4 查看状态得到错误信息
根据错误提示,去查看对应的日志文件,
使用mysqlbinlog查看日志,进入bin目录
mysqlbinlog --stop-position=23277 ../log/slave-bin.000009 | mysql -u root -p -P 3308
总结:
- 主从数据库同步之前要确保数据库完全一致,包括数据库名称和表中存储的数据;
- 如果使用低版本的数据库和高版本的数据库主从同步,最好是低版本的作为主库;
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com