Mysql5.7使用注意事項隨筆

1.今天搭建的mysql5.7.23環境,發現從5.6遷移函數的時候報錯

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)
解決辦法:
set global log_bin_trust_function_creators=1;

2.Mysql5.7 GTID 開啓的情況下,從庫同步報錯跳過錯誤操作

未開啓GTID的操作如下:

mysql>stop slave ;
mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1        #跳過一個事務
mysql>start slave 

開啓GTID的操作如下:

mysql>select LAST_SEEN_TRANSACTION from performance_schema.replication_applier_status_by_worker;--獲取事務號
+----------------------------------------+
| LAST_SEEN_TRANSACTION                  |
+----------------------------------------+
| 3925f080-d294-11e8-a4ce-00163e126c59:2 |
+----------------------------------------+

mysql>stop slave;
Query OK, 0 rows affected (0.00 sec)
mysql>set gtid_next='3925f080-d294-11e8-a4ce-00163e126c59:2';
Query OK, 0 rows affected (0.00 sec)
mysql>begin;
Query OK, 0 rows affected (0.00 sec)
mysql>commit;
Query OK, 0 rows affected (0.00 sec)
mysql>SET GTID_NEXT="AUTOMATIC";
Query OK, 0 rows affected (0.00 sec)
mysql>start slave;
Query OK, 0 rows affected, 1 warning (0.03 sec)

3.修改參數(不修改研發不同意)

explicit_defaults_for_timestamp參數修改:

因爲默認這個參數是true如果表字段類似:
`WORK_DATE` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '參加工作日期'
insert的時候送 null就會報錯,研發要求改,因爲原來5.6版本默認是false
所以修改此參數
set global explicit_defaults_for_timestamp=false;-- (記得修改my.cnf)

sql_mode修改:
從'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'修改爲'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'

4.另外還有下問題:(mysql5.7默認sql模式問題)

1、某些GROUP BY的SQL語句無法執行了;
2、創建表時使用日期數據類型指定的默認值爲0000-00-00時報錯;
3、修改字段類型小於小於最長字段時報錯。
解決辦法參考:

http://www.ywnds.com/?p=8865

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章