1. SELECT
  2. DISTINCT(p.`id`),
  3. p.`id` ,
  4. v.`full_name` ,
  5. CONCAT(LEFT(v.mobile, 7), '****') ,
  6. DATE_FORMAT(DATE_ADD(v.`visit_time`, INTERVAL 8 HOUR), '%Y-%m-%d %H:%i:%s') ,
  7. v.`remark` ,
  8. w.`address_city` ,
  9. v.`record_person` ,
  10. v.`consult_country` ,
  11. v.`first_visit` ,
  12. v.`contact_advisor` ,
  13. v.`follow_advisor` ,
  14. v.`assign_person`
  15. FROM `aaaa`.`xxxxx` AS v
  16. LEFT JOIN `bbbb`.`xxxxxxxxxx` AS p ON v.`mobile`= p.`mobile`
  17. LEFT JOIN `cccc` AS w ON (w.`full_name` =v.`contact_advisor` or w.`full_name`=v.`follow_advisor` or w.`full_name` =v.`assign_person` )
  18. WHERE v.`visit_time`> DATE_FORMAT(DATE_SUB(now(), INTERVAL 24 HOUR), '%Y-%m-%d 10:00:00')

  

 

mysql+centos7+主从复制

 

MYSQL(mariadb)

  1. MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。
    开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。
    MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。

方法1:yum安装mariadb

Red Hat Enterprise Linux/CentOS 7.0 发行版已将默认的数据库从 MySQL 切换到 MariaDB。

第一步:添加 MariaDB yum 仓库

  1. 、首先在 RHEL/CentOS Fedora 操作系统中添加 MariaDB YUM 配置文件 MariaDB.repo 文件。

  2. #编辑创建mariadb.repo仓库文件
  3. vi /etc/yum.repos.d/MariaDB.repo
  1. 、添加repo仓库配置
  2. [mariadb]
  3. name = MariaDB
  4. baseurl = http://yum.mariadb.org/10.1/centos7-amd64
  5. gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
  6. gpgcheck=

第二步:在 CentOS 7 中安装 MariaDB

  1. 、当 MariaDB 仓库地址添加好后,你可以通过下面的一行命令轻松安装 MariaDB

  2. yum install MariaDB-server MariaDB-client -y

第三不,启动mariadb相关命令

 
  1. mariadb数据库的相关命令是:
  2.  
  3. systemctl start mariadb #启动MariaDB
  4.  
  5. systemctl stop mariadb #停止MariaDB
  6.  
  7. systemctl restart mariadb #重启MariaDB
  8.  
  9. systemctl enable mariadb #设置开机启动
 

启动后正常使用mysql

  1. systemctl start mariadb

初始化mysql

  1. 在确认 MariaDB 数据库软件程序安装完毕并成功启动后请不要立即使用。为了确保数据 库的安全性和正常运转,需要先对数据库程序进行初始化操作。这个初始化操作涉及下面 步骤。
  2. 设置 root 管理员在数据库中的密码值(注意,该密码并非 root 管理员在系统中的密 码,这里的密码值默认应该为空,可直接按回车键)。
  3. 设置 root 管理员在数据库中的专有密码。
  4. 随后删除匿名账户,并使用 root 管理员从远程登录数据库,以确保数据库上运行的业
  5. 务的安全性。
  6. 删除默认的测试数据库,取消测试数据库的一系列访问权限。
  7. 刷新授权列表,让初始化的设定立即生效。

确保mariadb服务器启动后,执行命令初始化

  1. mysql_secure_installation

初始化mysql

mysql基本命令

  1. #修改mysql密码
  2. MariaDB [(none)]> set password = PASSWORD('redhat123');

生产环境里不会死磕root用户,为了数据库的安全以及和其他用户协同管理数据库,就需要创建其他数据库账户,然后分配权限,满足工作需求。

  1. MariaDB [(none)]> create user yuchao@'127.0.0.1' identified by 'redhat123';
  2.  
  3. MariaDB [(none)]> use mysql;
  4.  
  5. MariaDB [mysql]> select host,user,password from user where user='yuchao';

切换普通用户yuchao,查看数据库信息,发现无法看到完整的数据库列表

  1. [root@master ~]# mysql -uyuchao -p -h 127.0.0.1
  2.  
  3. MariaDB [(none)]> show databases;

数据库权限设置

mysql使用grant命令对账户进行授权,grant命令常见格式如下

  1. grant 权限 on 数据库.表名 to 账户@主机名 对特定数据库中的特定表授权
  2. grant 权限 on 数据库.* to 账户@主机名   对特定数据库中的所有表给与授权
  3. grant 权限1,权限2,权限3 on *.* to 账户@主机名    对所有库中的所有表给与多个授权
  4. grant all privileges on *.* to 账户@主机名    对所有库和所有表授权所有权限

退出数据库,使用root登录,开始权限设置

  1. [root@master ~]# mysql -uroot -p
  2.  
  3. MariaDB [(none)]> use mysql;
  4.  
  5. MariaDB [(none)]> grant all privileges on *.* to yuchao@127.0.0.1;
  6.  
  7. MariaDB [mysql]> show grants for yuchao@127.0.0.1;

移除权限

  1. MariaDB [(none)]> revoke all privileges on *.* from yuchao@127.0.0.1;

配置mysql

1.中文编码设置,编辑mysql配置文件/etc/my.cnf,下入以下内容

  1. [mysqld]
  2. character-set-server=utf8
  3. collation-server=utf8_general_ci
  4. log-error=/var/log/mysqld.log
  5. [client]
  6. default-character-set=utf8
  7. [mysql]
  8. default-character-set=utf8

2.授权配置

 
  1. 远程连接设置哦设置所有库,所有表的所有权限,赋值权限给所有ip地址的root用户
    mysql > grant all privileges on *.* to root@'%' identified by 'password';
    #创建用户
    mysql > create user 'username'@'%' identified by 'password';
    #刷新权限
    flush privileges;

数据库备份与恢复

mysqldump命令用于备份数据库数据

  1. [root@master ~]# mysqldump -u root -p --all-databases > /tmp/db.dump

2.导出db1、db2两个数据库的所有数据

  1. mysqldump -uroot -proot --databases db1 db2 >/tmp/user.sql

进入mariadb数据库,删除一个db

  1. [root@master ~]# mysql -uroot -p
  2.  
  3. MariaDB [(none)]> drop database s11;

进行数据恢复,吧刚才重定向备份的数据库文件导入到mysql中

  1. [root@master ~]# mysql -uroot -p < /tmp/db.dump

MYSQL主从复制

MySQL数据库的主从复制方案,是其自带的功能,并且主从复制并不是复制磁盘上的数据库文件,而是通过binlog日志复制到需要同步的从服务器上。

MySQL数据库支持单向、双向、链式级联,等不同业务场景的复制。在复制的过程中,一台服务器充当主服务器(Master),接收来自用户的内容更新,而一个或多个其他的服务器充当从服务器(slave),接收来自Master上binlog文件的日志内容,解析出SQL,重新更新到Slave,使得主从服务器数据达到一致。

主从复制的逻辑有以下几种

一主一从,单向主从同步模式,只能在Master端写入数据

一主多从

双主主复制逻辑架构,此架构可以在Master1或Master2进行数据写入,或者两端同事写入(特殊设置)

  1. 在生产环境中,MySQL主从复制都是异步的复制方式,即不是严格的实时复制,但是给用户的体验都是实时的。
    MySQL主从复制集群功能使得MySQL数据库支持大规模高并发读写成为可能,且有效的保护了服务器宕机的数据备份。

应用场景

  1. 利用复制功能当Master服务器出现问题时,我们可以人工的切换到从服务器继续提供服务,此时服务器的数据和宕机时的数据几乎完全一致。
    复制功能也可用作数据备份,但是如果人为的执行drop,delete等语句删除,那么从库的备份功能也就失效了.

主从机制实现原理

  1. (1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
  2. (2) slavemasterbinary log events拷贝到它的中继日志(relay log);
  3. (3) slave重做中继日志中的事件,将改变反映它自己的数据。

master主库配置

 
  1. #查看数据库状态
  2. systemctl status mariadb
  3. #停mariadb
  4. systemctl stop mariadb
  5.  
  6. #修改配置文件
    vim /etc/my.cnf
    #修改内容
    #解释:server-id服务的唯一标识(主从之间都必须不同);log-bin启动二进制日志名称为mysql-bin

  [mysqld]
  server-id=1
  log-bin=mysql-bin

  1. #重启mariadb
    systemctl start mariadb
 

master主库添加从库账号

 
  1. 1.新建用于主从同步的用户chaoge,允许登录的从库是'192.168.178.130'
  2. create user 'chaoge'@'192.168.178.130' identified by 'redhat';
  3.  
  4. 2.#题外话:如果提示密码太简单不复合策略加在前面加这句
  5. mysql> set global validate_password_policy=0;
  6.  
  7. 3.给从库账号授权,说明给chaoge从库复制的权限,在192.168.178.130机器上复制
    grant replication slave on *.* to 'chaoge'@'192.168.178.130';
    #检查主库创建的复制账号
    select user,host from mysql.user;
    #检查授权账号的权限
    show grants for chaoge@'192.168.178.130';
  8.  
  9. 实现对主数据库锁表只读,防止数据写入,数据复制失败
    flush table with read lock;
  10.  
  11. 4.检查主库的状态

MariaDB [(none)]> show master status
-> ;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 575 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

File是二进制日志文件名,Position 是日志开始的位置。后面从库会用到 后面从库会用到 后面从库会用到!!!!!!

5.锁表后,一定要单独再打开一个SSH窗口,导出数据库的所有数据,

[root@oldboy_python ~ 19:32:45]#mysqldump -uroot -p --all-databases > /data/all.sql

6.确保数据导出后,没有数据插入,完毕再查看主库状态

show master status;

7.导出数据完毕后,解锁主库,恢复可写;

unlock tables;

8.将备份导出的数据scp至Slave数据库

scp /data/all.sql root@192.168.178.130:/data/

 

slave从库配置

  1. .设置server-id值并关闭binlog功能参数
  2. 数据库的server-id在主从复制体系内是唯一的,Slaveserver-id要与主库和其他从库不同,并且注释掉Slavebinlog参数。
    2.因此修改Slave的/etc/my.cnf,写入
    [mysqld]
    server-id=3
    3.重启数据库
    systemctl restart mariadb
    4.检查Slava从数据库的各项参数
    show variables like 'log_bin';
    show variables like 'server_id';
    5.恢复主库Master的数据导入到Slave
    导入数据(注意sql文件的路径)
    mysql>source /data/all.sql;
    方法二:
    #mysql -uroot -p < abc.sql
    6.配置复制的参数,Slave从库连接Master主库的配置
    mysql > change master to master_host='192.168.178.129',
    master_user='chaoge',
    master_password='redhat',
    master_log_file='mysql-bin.000001',
    master_log_pos=575;
    7.启动从库的同步开关,测试主从复制的情况
    start slave;
    8.查看复制状态
    show slave status\G;

检查主从复制是否成功的关键在于

  1. MariaDB [(none)]> show slave status\G
  2. *************************** . row ***************************
  3. Slave_IO_State: Waiting for master to send event
  4. Master_Host: 192.168.119.10
  5. Master_User: chaoge
  6. Master_Port:
  7. Connect_Retry:
  8. Master_Log_File: mysql-bin.
  9. Read_Master_Log_Pos:
  10. Relay_Log_File: slave-relay-bin.
  11. Relay_Log_Pos:
  12. Relay_Master_Log_File: mysql-bin.
  13. Slave_IO_Running: Yes
  14. Slave_SQL_Running: Yes

tip:

注意此处还未配置从库的只读模式,只需在slave服务器上配置/etc/my.cnf,加上以下配置,并且在slave上创建普通用户,使用普通用户主从同步即可达到只读的效果

如果用root用户,无法达到readonly,这是一个坑

  1. [mysqld]
  2. character-set-server=utf8
  3. collation-server=utf8_general_ci
  4. log-error=/var/log/mysqld.log
  5. server-id=
  6. read-only=true
  7. [client]
  8. default-character-set=utf8
  9. [mysql]
  10. default-character-set=utf8

sql 随笔更新的更多相关文章

  1. SQL批量更新数据库中所有用户数据表中字段类型为tinyint为int

    --SQL批量更新数据库中所有用户数据表中字段类型为tinyint为int --关键说明:--1.从系统表syscolumns中的查询所有xtype='48'的记录得到类型为[tinyint]的字段- ...

  2. SQL语句更新时间字段的年份、月份、天数、时、分、秒

    SQL语句更新时间字段的年份.月份.天数.时.分.秒 --修改d表日期字段的年份update dset birth=STUFF(convert(nvarchar(23),birth,120),1,4, ...

  3. SQL批量更新数据

    SQL批量更新数据 step1:导入Excel数据, 具体见百度.注意点:一列中含有float型数据和文本数据的时候,导入要将Excel中的表格属性改成文本,或在数字项目前加个单引号.   step2 ...

  4. Oracle 项目中 SQL 脚本更新方式

    DECLARE hasVersion ); dbVersion ); BEGIN ) INTO hasVersion FROM ELB_SETTINGS E WHERE E.KEY='dbVersio ...

  5. MyBatis的动态SQL操作--更新

    更新条件不确定,需要根据具体的情况生成sql语句. id是主键,一般不会去更新. 1.只更新name的值 update student set name = ? where id = ? 2.只更新s ...

  6. SQL Server 更新统计信息出现严重错误,应放弃任何可能产生的结果

      一台SQL Server 2008 R2版本(具体版本如下所示)的数据库,最近几天更新统计信息的作业出错,错误如下所示: Microsoft SQL Server 2008 R2 (SP2) - ...

  7. 用一句sql语句更新两个表并可更新对应的字段的值

    ACCESS 例子: insert into products (ProNumber,CASNumber,Cnname,Price,Enname,Baozhuang,Pinpai) select Pr ...

  8. 使用Phoenix通过sql语句更新操作hbase数据

    hbase 提供很方便的shell脚本,可以对数据表进行 CURD 操作,但是毕竟是有一定的学习成本的,基本上对于开发来讲,sql 语句都是看家本领,那么,有没有一种方法可以把 sql 语句转换成 h ...

  9. 探究分析---利用sql批量更新部分时间的同比数据

    问题:如何将social_kol_tmp表 中的字段cost_YA中日期为201901-201909中的值替换为相同brand和pltform对应18年月份的col_cost字段的数据,其他日期的co ...

随机推荐

  1. Xcode 打包(Shell)

    1. xcodebuild 1.1 查当前可用的 sdk $xcodebuild -showsdks 1.2 查看所支持的target $xcodebuild -target 1.2 清空当前编译的a ...

  2. adb bat 执行滑动事件

    chcp 65001 @echo off echo 开始滑动 set str =0 :start adb shell input swipe 100 150 100 100 choice /t 1 / ...

  3. ajax参数传递与后台接收

    目录 ajax参数传递与后台接收 Servlet中读取http参数的方法 使用默认contentType,参数追加到url后传递 使用默认contentType,参数放到data中传递 使用默认con ...

  4. Python的开发之路

    一.python入门 二.基本数据类型 三.输入与输出 四.基本运算符 五 .流程控制之if判断 六.流程控制之while循环 七.流程控制之for循环 八.数据类型与内置方法 九.文件的处理 十.字 ...

  5. NameNode与DataNode的工作原理剖析

    NameNode与DataNode的工作原理剖析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HDFS写数据流程 >.客户端通过Distributed FileSyst ...

  6. HBase海量数据存储

    1.简介 HBase是一个基于HDFS的.分布式的.面向列的非关系型数据库. HBase的特点 1.海量数据存储,HBase表中的数据能够容纳上百亿行*上百万列. 2.面向列的存储,数据在表中是按照列 ...

  7. Docker安装步骤

    在学习springcloud的消息总线时,需要安装rabbitmq,因为rabbitmq是用erlang开发的,所以安装rabbitmq又需要先安装erlang,总之安装过程中遇到各种坑,然而最终还是 ...

  8. ORM系列之Entity FrameWork详解

    一. 谈情怀 从第一次接触开发到现在(2018年),大约有六年时间了,最初阶段连接数据库,使用的是[SQL语句+ADO.NET],那时候,什么存储过程.什么事务 统统不理解,生硬的将SQL语句传入SQ ...

  9. day21双下方法,源码相关,异常处理

    #!/usr/bin/env python# -*- coding:utf-8 -*- # 1.列举你了解的面向对象中的特殊成员,并为每个写代码示例.'''__init__初始化:class A: d ...

  10. ccf 201903-5 317任务

    [题目背景]“你在平原上走着走着,突然迎面遇到一堵墙,这墙向上无限高,向下无限深,向左无限远,向右无限远,这墙是什么?”——<流浪地球>原著我们带着地球去流浪了,为了处理流浪过程中可能会发 ...