Mysql
 sql >> база данни >  >> RDS >> Mysql

Предупредителен код на Mysql 1592 Небезопасно изявление, записано в двоичния дневник, използвайки формат на изявление

Вероятно сте запознати с двата формата на двоичен журнал , базиран на изрази – който регистрира действителните заявки, които променят данните на главния, така че да могат да бъдат изпълнени на подчинения, и базиран на редове – който регистрира преди и/или след изображения на действителните данни за ред, които са били променен от заявката, така че подчинения може директно да приложи тези промени към своите данни... и смесен режим, при който оптимизаторът и механизмът за съхранение определят кой формат е оптималният формат на база заявка по заявка.

Изявлението, което изпълнявате, не е безопасно по принцип защото използвате INSERT ... SELECT в таблица с колона с автоматично увеличение. Ако заявка от тази обща форма бяха използвани в STATEMENT -базирана среда и SELECT не върна редовете в същия ред на главен и подчинен, редовете могат да бъдат избрани в различен ред и по този начин да се получат различни стойности за автоматично увеличение.

На практика специфичното заявката, която изпълнявате е детерминиран, защото вмъквате само един ред и изрично указвате стойността за автоматично увеличение. Подозирам, че това е причината за вашето объркване. Изглежда обаче, че все още задействате предупреждението, защото правите INSERT ... SELECT в таблица с автоматично увеличение и изглежда, че сървърът прилага обобщеното „небезопасно“ определяне към заявката по принцип, а не по прецизност.

Превключване на вашия binlog_format до MIXED трябва да накара предупреждението да изчезне, тъй като сървърът може да превключва режимите по своя преценка... и е много малко вероятно да има отрицателни странични ефекти. Ако не беше фактът, че STATEMENT винаги е бил по подразбиране (тъй като първоначално това беше единственият наличен вид репликация), подозирам, че биха направили MIXED по подразбиране отдавна... всъщност, ако се запознаете с вътрешните елементи на двоичните регистрационни файлове, вероятно ще сте склонни да правите както аз и да използвате ROW за почти всичко... има тенденция да прави много по-полезен двоичен дневник за отстраняване на неизправности и спасяване от проблеми, тъй като "старите" данни от ред се регистрират в DELETE и UPDATE .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JSON срещу сериализиран масив в база данни

  2. Грешка ETIMEDOUT при запитване на mysql база данни

  3. Как да създадете TRIGGER в SEQUELIZE (nodeJS)?

  4. Кога е необходим Class.forName при свързване към база данни чрез JDBC в уеб приложение?

  5. MySQL - ИЗБЕРЕТЕ името, което идва първо по азбучен ред