(编辑:jimmy 日期: 2024/12/29 浏览:2)
MySQL
MySQL简介
MySQL原本是一个开放源代码的关系数据库管理系统,原开发者为瑞典的MySQL AB公司,该公司于2008年被昇阳微系统(Sun Microsystems)收购。2009年,甲骨文公司(Oracle)收购昇阳微系统公司,MySQL成为Oracle旗下产品。
MySQL在过去由于性能高、成本低、可靠性好,已经成为最流行的开源数据库,因此被广泛地应用在Internet上的中小型网站中。随着MySQL的不断成熟,它也逐渐用于更多大规模网站和应用,比如维基百科、Google和Facebook等网站。非常流行的开源软件组合LAMP中的“M”指的就是MySQL。
但被甲骨文公司收购后,Oracle大幅调涨MySQL商业版的售价,且甲骨文公司不再支持另一个自由软件项目OpenSolaris的发展,因此导致自由软件社群们对于Oracle是否还会持续支持MySQL社群版(MySQL之中唯一的免费版本)有所隐忧,MySQL的创始人麦克尔·维德纽斯以MySQL为基础,成立分支计划MariaDB。而原先一些使用MySQL的开源软件逐渐转向MariaDB或其它的数据库。例如维基百科已于2013年正式宣布将从MySQL迁移到MariaDB数据库[6]。
关系型数据库
关系数据库(英语:Relational database),是创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系模型是由埃德加·科德于1970年首先提出的,并配合“科德十二定律”。现如今虽然对此模型有一些批评意见,但它还是数据存储的传统标准。标准数据查询语言SQL就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。
关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。
MySQL特性
MySQL是一种使用广泛的数据库,特性如下:
# 下载mysql $ wget http://mirrors.163.com/mysql/Downloads/MySQL-8.0/mysql-8.0.13-el7-x86_64.tar.gz # 解压 $ mysql tar -zxvf mysql-8.0.4-rc-linux-glibc2.12-x86_64.tar.gz -C /usr/local # 修改文件夹名称 $ mv mysql-8.0.4-rc-linux-glibc2.12-x86_64/ mysql 添加默认配置文件 $ vim/etc/my.cnf [client] port=3306 socket=/tmp/mysql.sock [mysqld] port=3306 user=mysql socket=/tmp/mysql.sock basedir=/usr/local/mysql datadir=/usr/local/mysql/data # 创建mysql组 $ groupadd mysql # 创建mysql用户 $ useradd -g mysql mysql # 创建mysql数据目录 $ mkdir $MYSQL_HOME/data # 初始化mysql $ /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ # 初始化报错 bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory # 解决方法 yum install -y libaio # 初始化报错 2018-07-08T02:53:24.542370Z 0 [System] [MY-010116] /usr/local/mysql/bin/mysqld (mysqld 8.0.4-rc) starting as process 17745 ... mysqld: Can't create/write to file '/tmp/mysql/data/ibd35qXQ' (Errcode: 13 - Permission denied) 2018-07-08T02:53:24.554816Z 1 [ERROR] [MY-011066] InnoDB: Unable to create temporary file; errno: 13 2018-07-08T02:53:24.554856Z 1 [ERROR] [MY-011066] InnoDB: InnoDB Database creation was aborted with error Generic error. You may need to delete the ibdata1 file before trying to start up again. 2018-07-08T02:53:24.555000Z 0 [ERROR] [MY-010020] Data Dictionary initialization failed. 2018-07-08T02:53:24.555033Z 0 [ERROR] [MY-010119] Aborting 2018-07-08T02:53:24.555919Z 0 [System] [MY-010910] /usr/local/mysql/bin/mysqld: Shutdown complete. # 解决办法:修改/tmp/mysql的目录权限 $ chown -R mysql:mysql /tmp/mysql # 初始化成功 > 如果无异常情况日志如下可以看到mysql默认会生成root账号和密码root@localhost: /TI(mjVAs1Ta [root@localhost mysql]# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data 2019-01-29T10:19:34.023997Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.13) initializing of server in progress as process 4240 2019-01-29T10:19:39.764895Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: /TI(mjVAs1Ta 2019-01-29T10:19:43.041419Z 0 [System] [MY-013170] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.13) initializing of server has completed # 拷贝mysql启动文件到系统初始化目录 $ cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld # 启动mysql服务器 $ service mysqld start
mysql 基本操作
# 使用mysql客户端连接mysql $ /usr/local/mysql/bin/mysql -u root -p password 修改mysql的默认初始化密码 > alter user 'root'@'localhost' identified by 'root'; # 创建用户 CREATE USER '用户名称'@'主机名称' INDENTIFIED BY '用户密码' > create user 'jack'@'localhost' identified by 'jack'; # 授予权限 grant 权限 on 数据库.表 to '用户名'@'登录主机' [INDENTIFIED BY '用户密码']; > grant replication slave on *.* to 'jack'@'localhost'; # 刷新 # $ flush privileges; # 修改root用户可以远程连接 > update mysql.user set host='%' where user='root'; # 查看mysql所用用户 > select user,host from mysql.user; # docker 修改mysql的最大连接数 apt-get update apt-get install vim vim /etc/mysql/mysql.conf.d/mysqld.cnf max_connections=1000 > alter user 'root'@'%' identified with mysql_native_password by 'root';
mysql 集群主从复制
准备两台安装好的mysql服务器
# 配置主服务添加如下配置 $ vim /etc/my.cnf # 节点唯一id值 server-id=1 # 开启二进制日志 log-bin=mysql-bin # 指定日志格式 有mixed|row|statement 推荐mixed binlog-format=mixed # 步进值auto_imcrement。一般有n台主MySQL就填n(可选配置) auto_increment_increment=2 # 起始值。一般填第n台主MySQL。此时为第一台主MySQL(可选配置) auto_increment_offset=1 # 忽略mysql库(可选配置) binlog-ignore=mysql # 忽略information_schema库(可选配置) binlog-ignore=information_schema # 要同步的数据库,默认所有库(可选配置) replicate-do-db=db1 # slave 节点配置 # 节点唯一id值 server-id=2 # 开启二进制日志 log-bin=mysql-bin # 步进值auto_imcrement。一般有n台主MySQL就填n(可选配置) auto_increment_increment=2 # 起始值。一般填第n台主MySQL。此时为第一台主MySQL(可选配置) auto_increment_offset=2 # 要同步的数据库,默认所有库(可选配置) replicate-do-db=db1 # 查看 master 的状态 , 尤其是当前的日志及位置 > show master status; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000004 | 1608 | | | | +------------------+----------+--------------+------------------+-------------------+ # 在slave节点执行如下命令 注意master_log_file 是对应show master status;中file的值,master_log_pos是对应position的值 > change master to master_host='192.168.79.15', master_user='root', master_password='root', master_log_file='mysql-bin.000009', master_log_pos=0; # 启动 slave 状态 ( 开始监听 msater 的变化 ) > start slave; # 查看 slave 的状态 > show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.79.15 Master_User: root Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000009 Read_Master_Log_Pos: 863 Relay_Log_File: node-6-relay-bin.000002 Relay_Log_Pos: 500 Relay_Master_Log_File: mysql-bin.000009 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 863 Relay_Log_Space: 709 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 Master_UUID: 6291c709-23af-11e9-99fb-000c29071862 Master_Info_File: mysql.slave_master_info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: Master_public_key_path: Get_master_public_key: 0 # 当Slave_IO_Running: Yes和Slave_SQL_Running: Yes都为yes是说明主从复制正常 #重置 slave 状态 . $ reset slave; #暂停 slave 状态 ; $ stop slave;
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。