Linux之主从数据库(1+X)
作者:@郑琰
本文转载请注明出处!:https://www.cnblogs.com/zhengyan6/p/15685486.html
主从数据库搭建
-
改主机名
-
配置网络
-
配置yum源(下载mysql)
-
写域名解析文件
-
主从同步:(备份,负载(读))
-
第一步:数据库的初始化,修改配置文件,定义server-id(所有节点),开启二进制日志功能binlog(主节点、主库)
-
第二步:授权,复制权限(主库)
-
第三步:从库连接主库
-
第四步:查询从库状态
-
第五步:验证主从同步的结果
改主机名
[root@server ~]# hostnamectl set-hostname mysql1 [root@server ~]# bash [root@mysql1 ~]# [root@client ~]# hostnamectl set-hostname mysql2 [root@client ~]# bash [root@mysql2 ~]#
配置网络和yum源此处省略
防火墙
如果数据库访问不成功,则需要关闭防火墙才可进行访问; 命令为: systemctl stop firewalld (关闭防火墙并不安全) 查看防火墙状态命令: systemctl status firewalld 打开防火墙命令为: systemctl start firewalld 如果不想关闭防火墙服务,可使用firewall-cmd命令添加规则;
查看链接(https://www.cnblogs.com/zhengyan6/p/15602877.html) 关于firewall-cmd的使用
写域名解析文件
[root@mysql1 ~]# vi /etc/hosts 末行写入 192.168.100.10 mysql1 192.168.100.20 mysql2 保存退出 [root@mysql1 ~]# scp /etc/hosts 192.168.100.20:/etc #复制一份到MySQL2或者去mysql2自己编辑写入
下载mysql服务
[root@mysql1 ~]#yum install -y mariadb mariadb-server [root@mysql2 ~]#yum install -y mariadb mariadb-server
重启并设置自启动
-两边都要重启(此处只写一边) [root@mysql1 ~]systemctl start mariadb [root@mysql1 ~]systemctl enable mariadb
安全配置向导
-两边都要配置(此处只写一边) [root@mysql1 ~]# mysql_secure_installation #安全配置向导
点击查看代码
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. Set root password? [Y/n] y New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. ... Success! By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] y ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] n ... skipping. By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] y ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
总结来说就是:
回车 (下次进入需要输入设置的密码)
y
设置密码
检查密码
y
n
y
y
编辑配置文件
mysql1
[root@mysql1 ~]# vim /etc/my.cnf 末行写入 [mysqld] log-bin = mysql-bin server-id =10 #(mysql1 ip:192.168.100.10,mysql2 ip:192.168.100.20)
mysql2
[root@mysql2 ~]# vim /etc/my.cnf 末行写入 [mysqld] server-id =20 #(mysql1 ip:192.168.100.10,mysql2 ip:192.168.100.20)
重启
[root@mysql1 ~]# systemctl restart mariadb [root@mysql2 ~]# systemctl restart mariadb
进行主从同步的二三四步
mysql1
[root@mysql1 ~]# mysql -uroot -p11111 #进入mysql数据库 五个一为自己设置的密码 MariaDB [(none)]> grant all privileges on *.* to root@'%' identified by "11111"; #对所有远程root身份登录并对所有库和表赋予读写权限,通过密码为11111 MariaDB [(none)]> grant replication slave on *.* to 'user'@'mysql2' identified by '11111'; #此处mysql2需和域名解析主机名一致 #所有库和所有表对从数据库赋予复制权限,并通过user用户登录到mysql2,通过密码为11111
mysql2
[root@mysql2 ~]# mysql -uroot -p11111 #进入mysql数据库 五个一为自己设置的密码 MariaDB [(none)]> grant all privileges on *.* to root@'%' identified by "11111"; #同上 MariaDB [(none)]> change master to master_host='mysql1',master_user='user',master_password='11111'; #此处mysql1需和域名解析主机名一致 #改变主人为主数据库,用户为user,主库通过密码为11111 MariaDB [(none)]> start slave; #开始为“从库” MariaDB [(none)]> show slave status\G #查询从库状态 Slave_IO_Running: Yes Slave_SQL_Running: Yes 为yes即可
验证主从同步的结果
mysql1
MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------+ 3 rows in set (0.00 sec) #原本就有的数据库 MariaDB [(none)]> create database test; #创建一个名为test的数据库 MariaDB [(none)]> use test; #使用test数据库 MariaDB [(none)]> create table company(id int not null primary key,name varchar(50),addr varchar(255)); #创建一个名为company的表并设置字段类型 MariaDB [test]> insert into company values(1,"facebook","usa"); #插入数据
mysql2
MariaDB [(none)]> show databases; #mysql2中查看数据库 可以看到test +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 4 rows in set (0.00 sec) MariaDB [(none)]> use test; #使用test数据库 而且显示只可读 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 MariaDB [test]> show tables; #查看表 +----------------+ | Tables_in_test | +----------------+ | company | +----------------+ 1 row in set (0.00 sec) MariaDB [test]> select * from company; #显示表记录 +----+----------+------+ | id | name | addr | +----+----------+------+ | 1 | facebook | usa | +----+----------+------+ 1 row in set (0.00 sec)
从库创建数据库不会同步到主库并且主库看不到
mysql2
MariaDB [(none)]> create database zzz; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | | zzz | +--------------------+ 5 rows in set (0.00 sec)
mysql1
MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 4 rows in set (0.00 sec)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)