1、mysql 一主一从部署
1.1、yum安装mysql
http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/
1.2 、配置Mysql扩展源
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
rpm -ivh http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/mysql57-community-release-el7-10.noarch.rpm
1-3、yum安装mysql
yum install mysql-community-server -y
1-4、启动Mysql 并加入开机自启
systemctl start mysqld
systemctl stop mysqld
systemctl enable mysqld
1-5、使用Mysq初始密码登录数据库
grep "password" /var/log/mysqld.log
mysql -uroot -pma1S8xjuEA/F
1-6、修改数据库密码
数据库默认密码规则必须携带大小写字母、特殊符号,字符长度大于8否则会报错。
因此设定较为简单的密码时需要首先修改set global validate_password_policy和_length参数值。
>mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)
>mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)
1-7、修改密码
mysql> set password for root@localhost = password('mkxiaoer');
Query OK, 0 rows affected, 1 warning (0.00 sec)
或者
mysql>ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';
1-8、登录测试
[root@http-server ~]# mysql -uroot -pmkxiaoer
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.
2、概述
主从复制(也称 AB 复制)允许将来自一个MySQL数据库服务器(主服务器)的数据复制到一个或多个MySQL数据库服务器(从服务器)。
复制是异步的 从站不需要永久连接以接收来自主站的更新。
根据配置,您可以复制数据库中的所有数据库,所选数据库甚至选定的表。
2.1、MySQL中复制的优点包括:
1、横向扩展解决方案 - 在多个从站之间分配负载以提高性能。在此环境中,所有写入和更新都必须在主服务器上进行。但是,读取可以在一个或多个从设备上进行。该模型可以提高写入性能(因为主设备专用于更新),同时显着提高了越来越多的从设备的读取速度。
2、数据安全性 - 因为数据被复制到从站,并且从站可以暂停复制过程,所以可以在从站上运行备份服务而不会破坏相应的主数据。
分析 - 可以在主服务器上创建实时数据,而信息分析可以在从服务器上进行,而不会影响主服务器的性能。
3、远程数据分发 - 您可以使用复制为远程站点创建数据的本地副本,而无需永久访问主服务器
2.2、前提是作为主服务器角色的数据库服务器必须开启二进制日志
主服务器上面的任何修改都会通过自己的 I/O tread(I/O 线程)保存在二进制日志 Binary log 里面。
从服务器上面也启动一个 I/O thread,通过配置好的用户名和密码, 连接到主服务器上面请求读取二进制日志,然后把读取到的二进制日志写到本地的一个Realy log(中继日志)里面。
从服务器上面同时开启一个 SQL thread 定时检查 Realy log(这个文件也是二进制的),如果发现有更新立即把更新的内容在本机的数据库上面执行一遍。
每个从服务器都会收到主服务器二进制日志的全部内容的副本。
从服务器设备负责决定应该执行二进制日志中的哪些语句。
除非另行指定,否则主从二进制日志中的所有事件都在从站上执行。
如果需要,您可以将从服务器配置为仅处理一些特定数据库或表的事件
03、具体配置如下
03-01、Master节点配置/etc/my.cnf (master节点执行)
vim /etc/my.cnf
[mysqld]
## mysql事务隔离基别
transaction-isolation=READ-COMMITTED
## 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
## 复制过滤:不需要备份的数据库,不输出(mysql库一般不同步)
binlog-ignore-db=mysql
## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed
03-02、Slave节点配置/etc/my.cnf (slave节点执行)
> vim /etc/my.cnf
[mysqld]
## mysql事务隔离基别
transaction-isolation=READ-COMMITTED
## 设置server_id,注意要唯一
server-id=102
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
##复制过滤:不需要备份的数据库,不输出(mysql库一般不同步)
binlog-ignore-db=mysql
## 如果需要同步函数或者存储过程
log_bin_trust_function_creators=true
## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
03-03、在master服务器授权slave服务器可以同步权限(master节点执行)
注意:在master服务器上执行
mysql > mysql -uroot -pmaster的密码
# 授予slave服务器可以同步master服务
mysql > grant replication slave, replication client on *.* to 'root'@'slave服务的ip' identified by 'slave服务器的密码';
mysql > flush privileges;
# 查看MySQL现在有哪些用户及对应的IP权限(可以不执行,只是一个查看)
mysql > select user,host from mysql.user;
03-04、查询master服务的binlog文件名和位置(master节点执行)
mysql > show master status;
日志文件名:mysql-bin.000002
复制的位置:154
03-05、slave进行关联master节点(slave节点执行)
mysql > mysql -uroot -p你slave的密码
开始绑定
mysql> change master to master_host='master服务器ip', master_user='root', master_password='master密码', master_port=3306, master_log_file='mysql-bin.000002',master_log_pos=154;
这里注意!!!! master_log_file 和 master_log_pos 都是通过 master服务器通过show master status获得。
03-06、在slave节点上查看主从同步状态(slave节点执行)
启动主从复制
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
再查看主从同步状态
mysql> show slave status\G;
同步状态图
03-07、主从复制测试
1:在master下创建数据库和表,或者修改和新增,删除记录都会进行同步(master节点执行)
2:点击查看slave节点信息(slave节点执行)