最近准备配置宝塔面板 的数据库主从,然后看要收钱。。
本着能动手就不吵吵的基本原则,就开始从网上找教程和测试。
我这用的是MariaDB,主库10.4,从库10.3
第一步:
在主库的phpmyadmin创建从库的访问,
点击账号,然后创建从库的权限,如果主库从库名字一致,则创建一个不需要密码的从库,并且把从库地址填写进去。
(注意不要把原来的库干掉)
第二步:
在主库配置允许从库的访问,在宝塔面板的数据库的权限处进行配置。
第三步:
在宝塔的数据库设置,修改配置文件。
在[mysqld]下面加
binlog-do-db= 这里填主库的用户名
binlog-ignore-db=mysql #这个意思是忽略系统库
sync_binlog = 1 #确保binlog日志写入后与硬盘同步
binlog_checksum = crc32 #这个是MySQL5.6.5以后用的,这版本之前用none
修改好以后重启数据库。不是重载配置,因为我好像重载了不生效。
sync_binlog这个参数是对于MySQL系统来说是至关重要的,他不仅影响到Binlog对MySQL所带来的性能损耗,而且还影响到MySQL中数据的完整性。对于"sync_binlog"参数的各种设置的说明如下:
sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。
sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。
在MySQL中系统默认的设置是sync_binlog=0,也就是不做任何强制性的磁盘刷新指令,这时候的性能是最好的,但是风险也是最大的。因为一旦系统Crash,在binlog_cache中的所有binlog信息都会被丢失。而当设置为“1”的时候,是最安全但是性能损耗最大的设置。因为当设置为1的时候,即使系统Crash,也最多丢失binlog_cache中未完成的一个事务,对实际数据没有任何实质性影响。
从以往经验和相关测试来看,对于高并发事务的系统来说,“sync_binlog”设置为0和设置为1的系统写入性能差距可能高达5倍甚至更多。
第四步:
在从库宝塔的数据库设置,修改配置文件。也是在[mysqld]下面
server-id = 2 #这里是要改成和源库不一样的
replicate-do-db=这里填从库的用户名,一般我都是一样
slave-skip-errors = all
这里有个说明:
#如果需要同步的数据库名相同
replicate-do-db=zxkang_sync #需要同步的数据库名。如果不指明同步哪些库,就去掉这行,表示所有库的同步(除了ignore忽略的库)。
#如果需要同步的数据库名不同
replicate-rewrite-db=zxkang_sync->test # master 上的数据库名为 zxkang_sync , slave 上的库名为 test
改完以后重启数据库。
第五步:
在从库ssh登录,然后
mysql -u 用户名 p
然后输入密码
如果你习惯的话,可以用root,那对应前面授权的时候就是root了
第六步,
登录进来以后,停止slave从库进程,然后配置,然后重启,然后查看状态
stop slave; #执行同步前,要先关闭slave
change master to master_host='主库IP',master_user='主库用户名',master_password='主库密码',master_log_file='从phpmyadmin里面,复制按钮,查看主服务器状态,那个日志信息',master_log_pos=0;
说明:master_log_pos表示日志偏移量,我看了网上好多的数,自己也试了不行,最后改0,0 在这里表示系统自己判断
完了以后
start slave; #这里表示启动从库进程
show slave status \G; #这里表示查看状态
如果看到
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
就表示主从复制开始了,然后就可以去从库看了。