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是一种使用广泛的数据库,特性如下:

  • 使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性"color: #ff0000">linux (CentOS7.5_x86_64)下安装mysql8.0

    # 下载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;

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。

广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。