MySQL杂记

启动、停止、重启


启动

1、使用 service 启动:service mysqld start 2、使用 mysqld 脚本启动:/etc/inint.d/mysqld start 3、使用 safe_mysqld 启动:safe_mysqld&

停止

1、使用 service 启动:service mysqld stop 2、使用 mysqld 脚本启动:/etc/inint.d/mysqld stop 3、mysqladmin shutdown

重启

1、使用 service 启动:service mysqld restart 2、使用 mysqld 脚本启动:/etc/inint.d/mysqld restart

ps:实际中发现有的系统使用命令是mysql,不是mysqld;是mysqld_safe,而不是safe_mysqld。

mariadb的安装参见:Redhat / Centos 7 安裝 MariaDB Server

允许远程用户登录访问mysql的方法


参考原文

MySQL任务


启动时执行的任务脚本:

配置文件,比如my.cnf中 添加: [server] 或者 [mysqld] 或者 [mysqld_safe] init-file="Your file location" 重启mysqld 就可以看到效果了。

定时任务:

支持的mysql版本:5.1.x及以上 要查看当前是否已开启事件调度器,可执行如下SQL:

SHOW VARIABLES LIKE 'event_scheduler'; 或

SELECT @@event_scheduler; 或

SHOW PROCESSLIST; 若显示:

+-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | event_scheduler | OFF | +-----------------+-------+ 则可执行

SET GLOBAL event_scheduler = 1; 或

SET GLOBAL event_scheduler = ON; 来开启,也可以直接在启动命令加上“–event_scheduler=1”,例如:

mysqld ... --event_scheduler=1

my.ini or my.cnf 中的 [mysqld] 添加 event_scheduler=ON

时间类型

mysql中DATETIME、DATE和TIMESTAMP的区别

内存表

建表加上engine=memory 配置文件中加上

<!-- lang: shell -->
 # 表的大小
tmp_table_size=6000M
max_heap_table_size=6000M

存储过程

SQLServer访问MySQL数据

  1. SQLServer通过链接服务器访问MySQL。链接服务器可以选择“Microsoft OLE DB Provider for ODBC Drivers”——即通过ODBC来访问MySQL。反过来——通过MySQL访问SQLServer,还没有查到如何实现。

  2. X64的windows系统需要安装64位版本的MySQL的ODBC驱动。32位的驱动实践发现是不行的。

  3. 如果点击“新建链接服务器”—>“其他数据源”—>“访问接口”的下拉框选项中没有“Microsoft OLE DB Provider for ODBC Drivers”的选项,那么需要安装一个驱动补丁:“WindowsServer2003.WindowsXP-KB948459-v2-x64-CHS.exe”。在windows2003实测可用。安装上之后就有那个ODBC的下拉选项了。

  4. “数据源”填写ODBC的名字。

  5. “访问接口字符串”内容举例:Driver={MySQL ODBC 5.3.4 Driver};Server=;Database=test;User=root;Password=5585354;Option=3;

  6. 使用“OPENQUERY”方式访问MySQL链接服务器。例如:SELECT * FROM OPENQUERY(ONLINE, 'select * from UM_ONLINE_INFO; ') ;其中OPENQUERY的两个参数分别为链接服务器名和SQL语句。

  7. “OPENQUERY”的条件查询可以这样写:

    <!-- lang: sql -->

    SELECT * FROM OPENQUERY(ONLINE, 'select * from UM_ONLINE_INFO; ') WHERE USR_USER_ID = 90898;

也可以这样写 :

<!-- lang: sql -->
SELECT * 
FROM OPENQUERY(ONLINE, 'select * from UM_ONLINE_INFO where USR_USER_ID = 90898;');

但打开执行计划会发现性能有所不同。 SQL执行计划 一个是远程全查出来之后再做过滤;另一个在远程查询的时候就已经过滤了。于是想把条件写到OPENQUERY的SQL语句参数中,当然要可变参数了不然还有什么意义。如:

<!-- lang: sql -->
declare @user_id int
set @user_id = 90898

declare @sql_smt varchar(512)
set @sql_smt = 'select * from UM_ONLINE_INFO '
set @sql_smt = @sql_smt + 'where USR_USER_ID = '
set @sql_smt = @sql_smt + convert(varchar(12), @user_id)
set @sql_smt = @sql_smt + ';'

select @sql_smt -- select * from UM_ONLINE_INFO where USR_USER_ID = 90898;

SELECT * FROM OPENQUERY(ONLINE, @sql_smt );

但SQLServer2005客户端执行报错:“'@sql_smt' 附近有语法错误。”,查询MSDN发现:“OPENQUERY does not accept variables for its arguments.”shit!why?……

但是可以这样:

<!-- lang: sql -->
declare @user_id int
set @user_id = 90898

declare @sql_smt varchar(512)
set @sql_smt = 'select * from UM_ONLINE_INFO '
set @sql_smt = @sql_smt + 'where USR_USER_ID = '
set @sql_smt = @sql_smt + convert(varchar(12), @user_id)
set @sql_smt = @sql_smt + ';'

declare @whole_sql_smt varchar(768)
set @whole_sql_smt = 'SELECT * FROM OPENQUERY(ONLINE, '
set @whole_sql_smt = @whole_sql_smt + '''' + @sql_smt + '''' + ');'

select @sql_smt -- select * from UM_ONLINE_INFO where USR_USER_ID = 90898;
select @whole_sql_smt -- SELECT * FROM OPENQUERY(ONLINE, 'select * from UM_ONLINE_INFO where USR_USER_ID = 90898;');

exec (@whole_sql_smt);

参考 这就基本OK了。

SQLServer与MySQL的不同之处

命令行执行MySQL脚本

参考 第一种方式:在未连接数据库的情况下,输入 mysql -h localhost -u root -p 123456 < d:\book.sql 回车即可; 第二种方式:在已连接数据库的情况下,此时命令提示符为mysql>,输入 source d:\book.sql 或者 . d:\book.sql 回车即可。

命令行新增用户及用户权限

参考 mysql> create user 'yht'@'%' identified by '12345678'; mysql> GRANT ALL PRIVILEGES ON * . * TO 'yht'@'%' IDENTIFIED BY '12345678' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;

修改mysql用户密码

参考 mysqladmin命令(回目录) 格式如下(其中,USER为用户名,PASSWORD为新密码): mysqladmin -u USER -p password PASSWORD 该命令之后会提示输入原密码,输入正确后即可修改。 例如,设置root用户的密码为123456,则 mysqladmin -u root -p password 123456 UPDATE user 语句(回目录) 这种方式必须是先用root帐户登入mysql,然后执行: UPDATE user SET password=PASSWORD('123456') WHERE user='root'; FLUSH PRIVILEGES; SET PASSWORD 语句(回目录) 这种方式也需要先用root命令登入mysql,然后执行: SET PASSWORD FOR root=PASSWORD('123456');

#设置mysql的连接通道的字符集和校验规则 使用putty连接mysql时,字符集不是utf-8,运行 SET CHARACTER SET utf8; 字符就不是乱码了。

windows 安装mysql

参见windows下安装mysql笔记

基本步骤:

  • 创建my.ini配置文件
  • 初始化。 mysqld --initialize-insecure
  • 注册MySQL服务到Windows系统。mysqld -install
  • 启动系统的MySQL服务。net start mysql

几个要注意的的点:

  • 需要打开具有管理员权限的命令行执行上面的命令。

  • my.ini 中的basedir 为MySQL的安装目录。我理解就是MYSQL_HOME所在的目录(解压后有bin、include、share等文件夹的目录)。不要乱设。

  • 更改my.ini需要重启mysql服务才能生效。

  • 要用mysqld --initialize-insecure。不要执行mysqld --initialize。不然设置用户密码麻烦。

  1. mysqld --initialize-insecure自动生成无密码的root用户
  2. mysqld --initialize自动生成带随机密码的root用户
  • data目录是否需要手动创建和MySQL版本有关:8.0.11不需要,5.7.22需要。可以先不创建。

执行

mysqld --initialize-insecure

看是否报错

  • --initialize-insecure 参数前面是2个减号。一个减号不报错。但net start mysql时服务无法正常启动。

  • 搞错了怎么办?

    • 删除data文件夹
    • mysqld -remove 从系统中删除MySQL的服务项。
    • net stop mysql 停止mysql服务。

转载于:https://my.oschina.net/u/1864567/blog/285938

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值