目录
一、Mysql介绍
1.1什么是MySQL
1.2MySQL的优势
1.3MySQL的常用语句
二、MySQL源码安装
三、实验练习
3.1MySQL部署
实验环境
实验步骤
1.创建用户,数据目录,更改权限
2.修改文件
3.初始化,会生成一个密码,将其保存在文件里
4.启动,并设置为开机自启动
5.数据库安全初始化
6.测试
3.2MySQL主从复制
实验环境
实验步骤
1.配置mastesr
2.进入数据库配置用户权限
3.查看二进制日志
4.配置salve(从数据库)
5.进入数据库配置
6.测试查看主数据库的数据会不会同步到从数据库上去
3.3延迟复制
实验环境
实验步骤
1.在创建一台虚拟机,和前面同样操作作为从MySQL slave2
2.slave2中数据库设置延迟复制
3.测试
3.4慢查询日志
实验环境
实验步骤
1.开启慢查询日志
2.测试
3.5mysql的并行复制
实验环境
实验步骤
1.查看slave1中的线程信息
2.在slaves中设定
3.测试查看
3.6启动半同步模式
实验环境
实验步骤
1.在master端配置启用半同步模式
2.安装半同步插件
3.打开半同步功能
4.在slave端开启半同步功能
5.测试
3.7mysql负载均衡(mysql路由)
实验环境
实验步骤
1.安装软件包(上传后rpm安装)
2.配置数据库路由
3.测试
3.8实现mysql组复制
实验环境
实验步骤
1.关闭所有主机数据库服务,写上域名解析
2.在mysql-node1中配置操作
3. 20,30主机修改配置文件
4.在mysql-node2,3中配置操作
5.查看是否全部加入组
6.测试在每个节点都可以完成读写,且数据同步
3.8 MHA部署实施
实验环境
实验步骤
1. 搭建主两从架构
2.安装MHA所需要的软件
3.生成配置目录和配置文件
一、Mysql介绍
1.1什么是MySQL
MySQL官网:
https://www.mysql.com/https://www.mysql.com/
MySQL的定义:
MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的RDBMS (Relational Database Management System,关系数据库管理系统)应用软件之一。
MySQL的起源:
MySQL的起源可以追溯到1995年,当时瑞典开发者Michael Widenius和David Axmark开始创建一个名为MySQL的轻量级数据库系统。最初,MySQL仅支持少量数据类型和表,但它因其高度可靠性和性能优势,在Linux和其他UNIX操作系统上得到了广泛应用。随着时间的推移,MySQL不断改进并扩展其功能,成为一个完全免费的开源数据库,其性能、可靠性和扩展性都得到了显著提升。由于互联网的普及,MySQL越来越受到开发者的青睐,逐渐成为Web应用程序的主流数据库之一。2000年,MySQL AB公司成立,旨在为MySQL数据库提供商业支持和服务,通过推广MySQL数据库,吸引了大量的用户和开发者,使得MySQL在业界更加广泛地应用。在2008年,Sun Microsystems收购了MySQL AB公司,这一举动使得MySQL得到了更加广泛的认可,并吸引了更多企业用户的关注。随后,在2010年,甲骨文(Oracle)收购了Sun Microsystems,MySQL随之被纳入Oracle的管理体系之中。在Oracle的管理下,MySQL的发展方向发生了变化,不仅加强了商业化开发,也积极推广MySQL的社区版,使得用户和开发者得到了更多的选择和支持,同时也加快了MySQL的开发和更新。随着时间的推移,MySQL不断改进和更新,推出了更加高效、安全和可靠的版本,支持云数据库、大数据等领域的应用,成为更加全面的数据库管理系统。今天,MySQL已经成为Web应用程序和企业应用的主流数据库之一,拥有数百万的用户和开发者,支持各种语言和平台。
1.2MySQL的优势
一、开源免费
MySQL 是开源软件,这意味着你可以免费使用它,无需支付高昂的授权费用。对于个人开发者、小型企业以及预算有限的项目来说,这是一个巨大的优势。它降低了软件开发和部署的成本,使得更多的人能够轻松地使用数据库管理系统。
二、性能卓越
- 快速的数据处理能力:MySQL 能够高效地处理大量的数据。它采用了优化的存储引擎和查询处理机制,能够快速地执行各种查询操作,包括简单的 SELECT 查询、复杂的 JOIN 操作和聚合函数计算等。
- 高并发支持:MySQL 可以同时处理多个客户端的连接请求,适用于高并发的应用场景。它通过优化连接管理、查询缓存和事务处理等方面,确保在高并发情况下的性能和稳定性。
- 可扩展性强:随着数据量的增长和业务的扩展,MySQL 可以通过增加硬件资源(如内存、磁盘空间和处理器)或使用分布式架构来扩展其性能和存储容量。它支持主从复制、集群等技术,可以轻松地实现数据库的水平扩展和高可用性。
三、功能丰富
- 多种存储引擎:MySQL 提供了多种存储引擎,如 InnoDB、MyISAM、Memory 等。每种存储引擎都有其特定的优势和适用场景。例如,InnoDB 支持事务处理、行级锁定和外键约束,适用于对数据完整性要求较高的应用;MyISAM 则具有较高的查询性能,适用于只读或以读为主的应用。
- 强大的 SQL 支持:MySQL 支持标准的 SQL 语言,并提供了丰富的扩展功能。它可以执行各种复杂的查询、插入、更新和删除操作,还支持存储过程、触发器、视图等高级数据库对象。
- 安全可靠:MySQL 提供了多种安全机制,包括用户认证、访问控制、数据加密等。它可以确保只有授权用户能够访问数据库,保护数据的安全性和隐私性。此外,MySQL 还具有数据备份和恢复功能,可以在发生故障或数据丢失时快速恢复数据。
四、跨平台性
MySQL 可以在多种操作系统上运行,包括 Windows、Linux、Unix 等。这使得它具有很高的灵活性,可以适应不同的开发环境和部署需求。无论你是在开发桌面应用、Web 应用还是移动应用,都可以使用 MySQL 作为数据库管理系统。
五、社区活跃
MySQL 拥有庞大的用户社区和开发者社区。这意味着你可以很容易地找到相关的文档、教程和技术支持。社区成员还积极参与 MySQL 的开发和改进,不断推出新的功能和优化。如果你在使用过程中遇到问题,可以通过社区论坛、邮件列表等渠道获得帮助。
1.3MySQL的常用语句
语句类型 | 具体语句 | 作用 | 举例 |
---|---|---|---|
数据查询 | SELECT * FROM table_name; | 从指定表中查询所有列的数据。 | SELECT * FROM employees; 查询 employees 表中的所有数据。 |
SELECT column1, column2 FROM table_name; | 从指定表中查询特定列的数据。 | SELECT name, age FROM students; 查询 students 表中的 name 和 age 列数据。 | |
SELECT column_name FROM table_name WHERE condition; | 根据条件查询特定列的数据。 | SELECT id FROM orders WHERE status='completed'; 查询 orders 表中状态为 “completed” 的订单 id。 | |
数据插入 | INSERT INTO table_name (column1, column2,...) VALUES (value1, value2,...); | 向表中插入新的数据行。 | INSERT INTO users (username, password) VALUES ('user1', '123456'); 向 users 表中插入一个新用户。 |
数据更新 | UPDATE table_name SET column1 = value1, column2 = value2,... WHERE condition; | 更新表中符合条件的数据行。 | UPDATE employees SET salary = salary + 1000 WHERE department = 'sales'; 将 sales 部门员工的工资增加 1000。 |
数据删除 | DELETE FROM table_name WHERE condition; | 删除表中符合条件的数据行。 | DELETE FROM products WHERE expired_date <CURDATE (); 删除过期日期早于当前日期的产品。 |
创建表 | CREATE TABLE table_name ( column1 datatype1, column2 datatype2, ... ); | 创建一个新的表。 | CREATE TABLE books (id INT, title VARCHAR (255), author VARCHAR (100)); 创建一个存储书籍信息的表。 |
添加列 | ALTER TABLE table_name ADD column_name datatype; | 向已有的表中添加新的列。 | ALTER TABLE customers ADD phone_number VARCHAR (20); 在 customers 表中添加一个电话号码列。 |
删除列 | ALTER TABLE table_name DROP COLUMN column_name; | 从表中删除指定的列。 | ALTER TABLE products DROP COLUMN old_price; 删除 products 表中的旧价格列。 |
修改列 | ALTER TABLE table_name MODIFY COLUMN column_name new_datatype; | 修改表中指定列的数据类型。 | ALTER TABLE students MODIFY COLUMN age SMALLINT; 将 students 表中的 age 列数据类型修改为 SMALLINT。 |
表约束 | CREATE TABLE table_name ( column1 datatype1 CONSTRAINT constraint_name PRIMARY KEY, column2 datatype2 CONSTRAINT constraint_name FOREIGN KEY REFERENCES other_table(other_column), ... ); | 设置表的主键、外键等约束。 | CREATE TABLE orders ( 创建 orders 表,设置 order_id 为主键,customer_id 为外键关联 customers 表。 |
二、MySQL
源码安装
和之前博客源码安装的步骤一样。官网下载需要的MySQL版本,使用wget命令下载,解压,编译,编译通过后make && make install。详细的步骤可以参考一下连接:
http://t.csdnimg.cn/mCeo7http://t.csdnimg.cn/mCeo7
三、实验练习
3.1MySQL
部署
实验环境
两台红帽7主机,10和20。
实验步骤
1.创建用户,数据目录,更改权限
2.修改文件
3.初始化,会生成一个密码,将其保存在文件里
4.启动,并设置为开机自启动
5.数据库安全初始化
6.测试
3.2MySQL
主从复制
实验环境
相同。
实验步骤
1.配置mastesr
[root@mysql-node1 mysql]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
log-bin=mysql-bin
server-id=1
[root@mysql-node1 mysql]# /etc/init.d/mysqld restart
2.进入数据库配置用户权限
查看,这里的名称和id到时候要在从数据库添加:
3.查看二进制日志
4.配置salve(从数据库)
[root@mysql-node2 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
server-id=2
[root@mysql-node2 ~]# /etc/init.d/mysqld restart
5.进入数据库配置
[root@mysql-node2 ~]# mysql -plee
6.测试查看主数据库的数据会不会同步到从数据库上去
3.3延迟复制
实验环境
相同。
实验步骤
1.在创建一台虚拟机,和前面同样操作作为从MySQL slave2
2.slave2
中数据库设置延迟复制
修改后在master中写入数据后过了延迟时间才能被查询到,删除也是同样效果 。
3.测试
60秒后:
3.4慢查询日志
实验环境
相同。
实验步骤
1.开启慢查询日志
2.测试
3.5mysql
的并行复制
实验环境
相同。
实验步骤
1.查看slave1
中的线程信息
默认情况下slave中使用的是sql单线程回放
在master中时多用户读写,如果使用sql单线程回放那么会造成组从延迟严重
开启MySQL的多线程回放可以解决上述问题
2.在slaves
中设定
3.测试查看
此时sql线程转化为协调线程,16个worker负责处理sql协调线程发送过来的处理请求
3.6启动半同步模式
实验环境
相同。
实验步骤
1.在master
端配置启用半同步模式
[root@mysql-node1 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
server-id=1
log-bin=mysql-bin
gtid_mode=ON
enforce-gtid-consistency=ON
rpl_semi_sync_master_enabled=1 #开启半同步功能
symbolic-links=0
2.安装半同步插件
3.打开半同步功能
4.在slave
端开启半同步功能
[root@mysql-node2 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
server-id=1
log-bin=mysql-bin
gtid_mode=ON
enforce-gtid-consistency=ON
rpl_semi_sync_master_enabled=1 #开启半同步功能
symbolic-links=0
slave2同样操作。
5.测试
从数据库好的时候主数据库写入很快,但是从数据库挂了,就会卡着写不了。这也是半同步的作用:就算不能写入,也不能让数据不同步
好的时候:
停用从数据库,模拟故障:
重启从数据库后:
3.7mysql
负载均衡(mysql
路由)
实验环境
相同。
实验步骤
我们需要在所有的数据库主机之外再开一台主机mysql-router,这里直接用mysql-node1来充当就好了,先关闭数据库服务。
1.安装软件包(上传后rpm安装)
2.配置数据库路由
3.测试
启动数据库,创建测试用户:
查看调度,负载均衡:
3.8实现mysql
组复制
实验环境
相同。
实验步骤
1.关闭所有主机数据库服务,写上域名解析
三台主机都要操作
2.在mysql-node1
中配置操作
初始化数据库:
修改数据库密码:
登入数据库操作:
查看是否加入组:
将配置文件传给20,30:
3. 20,30主机修改配置文件
20:
30:
4.在mysql-node2,3
中配置操作
和mysql-node1操作一样:
先初始数据库;
修改密码;
登入数据库操作,所加参数也一致;
5.查看是否全部加入组
任一主机可查看:
6.测试在每个节点都可以完成读写,且数据同步
在mysql-node1
中创建表,写入数据:
mysql-node2
中:
mysql-node3
中:
回到mysql-node1
查看数据同步:
3.8 MHA部署实施
实验环境
相同。
实验步骤
1. 搭建主两从架构
[root@mysql-node1 ~]# /etc/init.d/mysqld stop
[root@mysql-node1 ~]# rm -fr /data/mysql/*
[root@mysql-node1 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
server-id=1
log-bin=mysql-bin
gtid_mode=ON
log_slave_updates=ON
enforce-gtid-consistency=ON
symbolic-links=0
[root@mysql-node1 ~]# mysqld --user mysql --initialize
[root@mysql-node1 ~]# /etc/init.d/mysqld start
[root@mysql-node1 ~]# mysql_secure_installation
[root@mysql-node1 ~]# mysql -p
mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'lee';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT REPLICATION SLAVE ON *.* TO repl@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
Query OK, 0 rows affected (0.02 sec)
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
Query OK, 0 rows affected (0.00 sec)
#在slave中
[root@mysql-node2 ~]# /etc/init.d/mysqld stop
[root@mysql-node2 ~]# rm -fr /data/mysql/*
[root@mysql-node2 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
server-id=1
log-bin=mysql-bin
gtid_mode=ON
log_slave_updates=ON
enforce-gtid-consistency=ON
symbolic-links=0
[root@mysql-node2 ~]# mysqld --user mysql --initialize
[root@mysql-node2 ~]# /etc/init.d/mysqld start
[root@mysql-node2 ~]# mysql_secure_installation
[root@mysql-node2 ~]# mysql -p
mysql> CHANGE MASTER TO MASTER_HOST='172.25.254.10', MASTER_USER='repl',
MASTER_PASSWORD='lee', MASTER_AUTO_POSITION=1;
Query OK, 0 rows affected, 2 warnings (0.00 sec)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
Query OK, 0 rows affected (0.01 sec)
mysql> SET GLOBAL rpl_semi_sync_slave_enabled =1;
Query OK, 0 rows affected (0.00 sec)
mysql> STOP SLAVE IO_THREAD;
Query OK, 0 rows affected (0.00 sec)
mysql> START SLAVE IO_THREAD;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON |
+----------------------------+-------+
1 row in set (0.01 sec)
#node3同样操作
2.安装MHA所需要的软件
[root@mysql-mha ~]# unzip MHA-7.zip
[root@mysql-mha MHA-7]# ls
mha4mysql-manager-0.58-0.el7.centos.noarch.rpm perl-Mail-Sender-0.8.23-
1.el7.noarch.rpm
mha4mysql-manager-0.58.tar.gz perl-Mail-Sendmail-0.79-
21.el7.noarch.rpm
mha4mysql-node-0.58-0.el7.centos.noarch.rpm perl-MIME-Lite-3.030-
1.el7.noarch.rpm
perl-Config-Tiny-2.14-7.el7.noarch.rpm perl-MIME-Types-1.38-
2.el7.noarch.rpm
perl-Email-Date-Format-1.002-15.el7.noarch.rpm perl-Net-Telnet-3.03-
19.el7.noarch.rpm
perl-Log-Dispatch-2.41-1.el7.1.noarch.rpm perl-Parallel-ForkManager-1.18-
2.el7.noarch.rpm
[root@mysql-mha MHA-7]# yum install *.rpm -y
[root@mysql-mha MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm
root@172.25.254.10:/mnt
[root@mysql-mha MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm
root@172.25.254.20:/mnt
[root@mysql-mha MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm
root@172.25.254.30:/mnt
#在sql-node中
[root@mysql-node1 ~]# yum install /mnt/mha4mysql-node-0.58-
0.el7.centos.noarch.rpm -y
#node2,3同样操作
3.生成配置目录和配置文件
#生成配置文件
[root@mysql-mha ~]# mkdir /etc/masterha
[root@mysql-mha MHA-7]# tar zxf mha4mysql-manager-0.58.tar.gz
[root@mysql-mha MHA-7]# cd mha4mysql-manager-0.58/samples/conf/
[root@mysql-mha conf]# cat masterha_default.cnf app1.cnf >
/etc/masterha/app1.cnf
#编辑配置文件
[root@mysql-mha ~]# vim /etc/masterha/app1.cnf
[server default]
user=root
password=lee
ssh_user=root
repl_user=repl
repl_password=lee
master_binlog_dir= /data/mysql
remote_workdir=/tmp
secondary_check_script= masterha_secondary_check -s 172.25.254.10 -s
172.25.254.11
ping_interval=3
manager_workdir=/etc/masterha
manager_log=/var/etc/masterha/manager.log
[server1]
hostname=172.25.254.10
candidate_master=1
check_repl_delay=0
[server2]
hostname=172.25.254.20
candidate_master=1
check_repl_delay=0
[server3]
hostname=172.25.254.30
no_master=1