docker mysql 没有 root 用户

docker mysql 没有 root 用户,需要创建 root

  1. flush privileges; 解决 ERROR 1290 (HY000): The MySQL server is running with the –skip-grant-tables option so it cannot execute 这个问题
  2. CREATE USER ‘root’@’%’ IDENTIFIED WITH mysql_native_password BY ‘123’;
  3. GRANT ALL PRIVILEGES ON *.* TO ‘root’@’%’ WITH GRANT OPTION;
  4. flush privileges;

mysql8 Public Key Retrieval is not allowed

mysql8 之后,用户的密码验证改为caching_sha2_password,MySQL5.7及之前为mysql_native_password。

方法一:

登录MySQL后输入:

ALTER USER ‘your user name’@’your host’ IDENTIFIED WITH mysql_native_password BY ‘YourPassword’;

FLUSH PRIVILEGES;

方法二:

编辑my.cnf文件,更改默认的身份认证插件。

vi /etc/my.cnf

在[mysqld]中添加下边的代码
default_authentication_plugin=mysql_native_password

然后重启MySQL

c# dapper mysql like

const string sql = "SELECT * from user_profile WHERE FirstName LIKE @name;";
var result = connection.Query<Profile>(sql, new {name = "%"+name+"%"});

Mysql自定义函数报错解决方法

在MySql中创建自定义函数报错信息如下:

ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

解决方法:

mysql>set global log_bin_trust_function_creators=1;

mysqld: Can’t read dir of ‘/etc/mysql/conf.d/’ (Errcode: 13 – Permission denied)

在安装docker mysql:8.0版本时,出现错误:

mysqld: Can’t read dir of ‘/etc/mysql/conf.d/’ (Errcode: 13 – Permission denied)
mysqld: [ERROR] Fatal error in defaults handling. Program aborted!

ERROR: mysqld failed while attempting to check config
command was: “mysqld –verbose –help”

原因

因为Centos7安全Selinux禁止了一些安全权限,导致mysql和mariadb在进行挂载/var/lib/mysql的时候会提示如下信息

解决方法

在docker run中加入 –privileged=true 给容器加上特定权限

附上 MySQL 创建命令:

docker run –privileged=true –restart=always -itd –name mysql8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=’123456′  -v /www/mysql/conf:/etc/mysql/conf.d -v /www/mysql/mysqldata:/var/lib/mysql  mysql –character-set-server=utf8mb4 –collation-server=utf8mb4_unicode_ci

MySQL 中的 timestamp 和 datetime

两者都可用来表示YYYY-MM-DD HH:MM:SS[.fraction]类型的日期。

对于TIMESTAMP,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户端当前时区进行返回。

而对于DATETIME,不做任何改变,基本上是原样输入和输出。

timestamp所能存储的时间范围为:’1970-01-01 00:00:01.000000′ 到 ‘2038-01-19 03:14:07.999999’。

datetime所能存储的时间范围为:’1000-01-01 00:00:00.000000′ 到 ‘9999-12-31 23:59:59.999999’。

在MySQL 5.6.5版本之前,Automatic Initialization and Updating只适用于TIMESTAMP,而且一张表中,最多允许一个TIMESTAMP字段采用该特性。从MySQL 5.6.5开始,Automatic Initialization and Updating同时适用于TIMESTAMP和DATETIME,且不限制数量。

ps: 自动初始化和自动更新(Automatic Initialization and Updating)

自动初始化指的是如果对该字段(譬如上例中的hiredate字段)没有显性赋值,则自动设置为当前系统时间。

自动更新指的是如果修改了其它字段,则该字段的值将自动更新为当前系统时间。

设置自动修改时间:

–添加UpdateTime 设置 默认时间 CURRENT_TIMESTAMP   设置更新时间为 ON UPDATE CURRENT_TIMESTAMP 
ALTER TABLE table_name
ADD COLUMN UpdateTime datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ‘创建时间’ ;

TIMESTAMP(3)与 DATETIME(3)意思是保留3为毫秒数

TIMESTAMP(6)与 DATETIME(6)意思是保留6为毫秒数

MySQL 主键和索引区别

主键:

所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,是唯一性索引。书大家都看过吧,每页有个页码,我们的数据表主键就相当于是这个页码。

索引:

索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。索引相当于书的目录,有了目录我们可以很快的知道这本书的基本内容和结构,数据索引也一样,它可以加快数据表的查询速度。

主键是索引的一种,唯一性索引。